成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle數據庫如何創建虛擬列和復合觸發器

數據庫 Oracle
Oracle的虛擬列解決了很多需要使用觸發器或者需要通過代碼進行計算統計產生數據信息的問題。而復合觸發器實際上是作為一個整體定義的四個不同的觸發器來執行操作。

本文我們主要介紹Oracle數據庫虛擬列復合觸發器方面的相關知識,包括虛擬列和復合觸發器的創建等,并給出了創建示例,接下來就讓我們來一起了解這一過程吧。

一、虛擬列 

Oralce 的虛擬列解決了以前很多需要使用觸發器或者需要通過代碼進行計算統計才能產生的數據信息。以前每次對其他的列進行統計,產生新列的時候都是采用在select 語句中通過統計計算增加新列的方法,執行效率很低,而且由于使查詢SQL語句變得冗長、復雜很容易出錯。嚴重的降低了開發效率和程序的執行效率。Oralce虛擬列的引入解決了這個問題。

Oralce 的虛擬列也有一些問題。不能使用insert into talbe_name values ().語句,在向含有虛擬列的表中添加數據時,要求insert語句的必須把添加的表的列名寫出來。insert into table_name (list1,list2,...listend)列名中不能出現虛擬列名,否則會提示錯誤。

創建虛擬列的實例如下:

 

  1. create table sales  
  2.  
  3. (   
  4.  
  5. sales_id number,  
  6.  
  7. cust_id number,   
  8.  
  9. sales_amt number,   
  10.  
  11. sale_category varchar2(6) /* 虛擬列名及數據類型*/  
  12.  
  13. generated always as  
  14.  
  15. (  
  16.  
  17. case  when sales_amt <= 10000 then 'LOW'   
  18.  
  19. when sales_amt > 10000 and sales_amt <= 100000 then 'MEDIUM'   
  20.  
  21. when sales_amt > 100000 and sales_amt <= 1000000 then 'HIGH'  else 'ULTRA'  end   
  22.  
  23. ) virtual    /*虛擬列值函數內容*/  
  24.  
  25. ); 

 

虛擬列被指定為“generated always as”,這意味著,列值在運行時生成,而非作為表的一部分進行存儲。該子句的后面是在詳細的 CASE 語句中計算值的方法。最后,指定了“virtual”以加強這是一個虛擬列的事實。

二、復合觸發器

復合觸發器實際上是作為一個整體定義的四個不同的觸發器。例如,UPDATE 復合觸發器將 before statement、before row、after statement 和 after row 都合并到一個復合觸發器中。這是一個單一代碼片段,因此您可以像任何其他單一 PL/SQL 代碼一樣來傳遞變量。

下面我們來引用一個示例,以幫助說明。注:創建了一個與sales表相同的表sales_log.

 

  1. create or replace trigger tri_sales  
  2.  
  3. for update of sales_amt on SALES  
  4.  
  5. compound trigger  
  6.  
  7. type ty_sales_log is table of sales_log%rowtype  
  8.  
  9. index by pls_integer;  
  10.  
  11. coll_sales_log ty_sales_log;  
  12.  
  13. ctr pls_integer:=0;  
  14.  
  15. before statement is  
  16.  
  17. begin  
  18.  
  19. dbms_output.put_line('in before statement');  
  20.  
  21. end before statement;  
  22.  
  23. before each row is  
  24.  
  25. begin  
  26.  
  27. dbms_output.put_line('in before each row');  
  28.  
  29. end before each row;  
  30.  
  31. after each row is  
  32.  
  33. begin  
  34.  
  35. ctr :ctr+1;  
  36.  
  37. dbms_output.put_line('in after each row.sales_amt'||:new.sales_amt);  
  38.  
  39. coll_sales_log(ctr).sales_id := :old.sales_id;  
  40.  
  41. coll_sales_log(ctr).cust_id := :old.cust_id;  
  42.  
  43. coll_sales_log(ctr).sales_amt := :new.sales_amt;  
  44.  
  45. end  after each row;  
  46.  
  47. after statement is  
  48.  
  49. begin  
  50.  
  51. dbms_output.put_line('in after statement');  
  52.  
  53. forall counter in 1..coll_sales_log.count()  
  54.  
  55. insert into sales_log(sales_id,cust_id,sales_amt)    
  56.  
  57. values (coll_sales_log(counter).sales_id,coll_sales_log(counter).cust_id,coll_sales_log(counter).sales_amt);  
  58.  
  59. end after statement;             /* 不能使用Insert into sales_log  values    
  60.  
  61. (coll_sales_log(counter));添加*/  
  62.  
  63. end tri_sales; 

 

上面實例包含了4個不同觸發形式,它們之間是獨立的執行的。

需要注意的是:sales_log 表中有虛擬列是不能使用Insert into sales_log  values  (coll_sales_log(counter));直接進行添加操作的,我們需要標明表中的列名。否則會出現錯誤。

關于Oracle數據庫虛擬列和復合觸發器的知識就介紹到這里了,如果您想了解更多Oracle數據庫的知識,可以到這里看一下:http://database.51cto.com/oracle/,相信一定可以給您帶來收獲的!

【編輯推薦】

  1. Oracle數據庫賬號頻繁被鎖定的原因排查
  2. Oracle數據庫中序列(SEQUENCE)的用法詳解
  3. 虛擬機安裝Oracle錯誤ORA-12514的解決方案
  4. Oracle數據庫如何創建DB Link操作遠程數據庫
  5. Oracle數據庫的物理存儲結構之數據庫控制文件詳解
責任編輯:趙鵬 來源: CSDN博客
相關推薦

2011-03-03 14:04:48

Oracle數據庫觸發器

2011-05-20 14:06:25

Oracle觸發器

2010-04-23 12:50:46

Oracle觸發器

2011-08-10 16:46:01

DB2數據庫觸發器

2015-07-23 17:02:55

oracle創建數據庫

2019-04-30 15:28:46

數據庫存儲過程觸發器

2010-09-13 16:46:10

SQL Server觸

2009-11-18 13:15:06

Oracle觸發器

2011-05-19 14:29:49

Oracle觸發器語法

2011-04-14 13:54:22

Oracle觸發器

2019-10-22 07:50:45

SqlServer數據庫觸發器

2024-01-19 09:37:19

MySQL數據庫

2011-04-02 15:05:23

觸發器數據庫

2011-08-09 14:54:01

OracleDATABASE LI

2011-08-04 13:31:50

數據庫記錄更改日志觸發器

2023-11-16 17:12:33

數據庫oracle

2010-04-15 15:32:59

Oracle操作日志

2010-06-30 09:36:25

SQL Server

2011-04-01 16:35:09

SQL Server數觸發器

2011-08-02 17:06:29

Oracle遠程數據庫創建DB Link
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品在线网站 | 欧美黄 片免费观看 | 欧美国产精品久久久 | 久久午夜剧场 | 国产精品中文在线 | 国产精品一区二区三区四区 | 一区二区三区视频在线观看 | 中文字幕一区二区三区四区五区 | 天天躁日日躁狠狠躁2018小说 | 精品久久久久一区二区国产 | 狠狠躁夜夜躁人人爽天天高潮 | 久久99精品国产 | 6996成人影院网在线播放 | 狠狠操狠狠 | 久久综合久色欧美综合狠狠 | 亚洲自拍一区在线观看 | 婷婷开心激情综合五月天 | 99这里只有精品视频 | 黑人一级片视频 | 毛片1 | 最新国产精品精品视频 | 中午字幕在线观看 | 91极品尤物在线播放国产 | 日韩在线观看一区 | 99久久免费精品 | 亚洲国产成人精品女人 | 亚洲不卡在线观看 | 成人免费观看男女羞羞视频 | 中文字幕不卡视频在线观看 | 国产二区在线播放 | 超碰人人91 | 国产精品久久久久久久免费大片 | 欧美黄视频 | 国产精品电影在线观看 | 国产日韩欧美在线一区 | 欧美黄色片 | 日本视频在线 | 欧美久久国产 | 精品1区| 日韩综合在线 | 国产精品久久久久久婷婷天堂 |