觸發器中OLD和NEW的使用

2021-08-02 11:44:31 字數 1017 閱讀 7164

一、old和new在oracle中不區分大小寫;

二、old和new可以用在declare中也可以用在begin裡的sql語句;(只會在begin中的sql語句裡用)

三、old表示插入之前的值,new表示新插入的值;

(old用在刪除和修改,new用在新增和修改)(但是用delete new值也沒有報錯,不知道怎麼回事)

create or replace trigger trigger_name                      --觸發器名不能過長,否則報錯:ora-00972:識別符號過長

before insert or update of colunm1,column2,、、、

on table_name

for each row      

--行級觸發器,一般表記的會報錯,沒有深入研究

declare

--宣告引數

pragma autonomous_transaction;            --自治事務

parameter_name 引數型別;                        --引數

begin 

if  inserting  then

insert into table_name values(:new.欄位名1,:new.欄位名2,、、、);

elsif  updating then

update table_name set  表欄位名=:new.欄位名,、、、 where 欄位名=:new.欄位名;

end if;

commit;

--自治事務的提交,若沒有自治事務,觸發器是不允許有commit的

end;

注意:sql語句中的表與觸發器的表不相同,如果相同且不加自治事務會導致報錯:ora-04091:表***發生了變化,觸發器/函式不能讀它;

即使新增了自治事務,要是當表的某個字段發生變化,對另一張表進行操作之後,又對該有觸發器的表字段進行修改,

也會報錯:ora-00060:等待資源時檢測到死鎖;

Oracle觸發器中的new和old

對於oracle觸發器中的new和old new 為乙個引用最新的列值 old 為乙個引用以前的列值 這兩個變數只有在使用了關鍵字 for each row 時才存在.且update語句兩個都有,而insert只有 new delect 只有 old createorreplacetriggertr...

Orcale觸發器中的冒號,new和old

問 這 中的冒號 是什麼意思呢?variable x refcursor exec authors sel x print x 答 x 是乙個主變數 主變數是乙個宣告在主環境中的變數,它會被傳遞到乙個或多個pl sql程式中,在程式中可以跟其他的變數一樣使用。sql plus和pl sql都能引用主...

Oracle 觸發器中NEW和OLD關修飾詞說明

觸發器中old 和 new修飾詞,old 代表變更前記錄,new代表變更後的記錄。create or replace trigger derive commission pct before insert or update of salary on employees for each row w...