過去做項目。都是前端後台的編碼。因為數據庫都讓項目經理給寫好的。自己對於數據庫並沒有多少優化,時間久了,反而把數據庫的知識給淡忘了,最近的項目用到的是Oracle數據庫,大家都知道,用到這個數據庫,就是數據量比較大的項目了。對於優化就有必要了。因此自己下班後抽空復習一下,並把這個記錄下來,不只是分享給大家,還能以後自己再次復習。若我講得不對,請留言更正,本人會虛心接受並改更,這樣才能進步。
create trigger saynewemp //創建一個觸發器 saynewemp是觸發器的名字 after insert //執行插入方法後觸發 on emp //針對是哪個表 declare //聲明 begin //開始 dbms_output.put_line("成功插入新員工") //觸發時打印一句話 end; //結果一個員工表的插入觸發器就寫好了。只要我們對員工表執行insert插入操作後,就會執行觸發器中的行為,如上所示,會自動打印一句話。
CREATE[or REPLACE]TRIGGER 觸發器的名字 //創建一個觸發器 {BEFORE|AFTER} //觸發器執行的順序,是方法前還是方法後執行 {DELETE|INSERT|UPDATE(OF 列名)} //給哪個方法設置觸發器,在UPDATE方法中,可以用OF指明哪一列名 ON 表名 //哪個表 [FOR EACH ROW[WHEN(條件)]] //如果有FOR EACH ROW,那就是行級觸發器,反之,就是語句觸發器 PLSQL塊 //執行塊語句級觸發器:在指定的操作語句操作之前或之後執行一次,不管這條語句影響了多少行,只執行一次。行級觸發器:觸發語句作用的每一條記錄都被觸發,在行級觸發器中使用 :old 和 :new偽記錄變量,識別值的狀態 是不是很抽象呢,其實大家從名字就可以清楚知道他們的分別。我在下面舉例說明吧。 例子:我們要在把員工表中的一個字段數據(有三條)插入到新的一個表中,
INSERT INTO EMP10 SELECT * FROM EMP WHERE NAME = 10;如果是語句級觸發器的話,只觸發一次,因為語句級觸發器:針對的是表, 而行級觸發器,前面也說了,是三條記錄,自然會觸發三次行級觸發器,也就是,針對的是行。就如前面的語法中,行級觸發器FOR EACH ROW 語句,後面也可以加WHEN的條件,可以指定哪一行。