[color=red]1、[/color]這是oracle的規定,不能對執行觸發器的表進行操作。
可以對new.***進行操作啊,
對於oracle行級觸發器(for each row),不能對本表做任何操作,包括讀取
原則:
在before insert觸發器中,可以實現對本表的訪問;
在after insert觸發器中,不能實現對本表的訪問;
在before/after update/delete觸發器中,都不能實現對本表的訪問
其實原因很簡單,就是為了防止髒讀
[color=red]2、[/color]寫oracle行級觸發器時,不能操作本表,報"表 *** 發生了變化,觸發器/函式不能讀"的錯誤的解決辦法
原因已經很明顯了就是行級的觸發器**中不能操作該錶,包括select,是挺鬱悶的
當然解決方法就是要根據原因了,正因為限定了行級觸發器的操作,只能選擇表級的觸發器了,但是在表級的觸發器又不能獲得:new和:old的值,那就只能採取兩種觸發器並用的方法了,並且還要包或者臨時表加以輔助.
首先在行級觸發器中將所需的,:new或者:old的值,寫到包或者臨時表中
然後在表級觸發器中處理包或者臨時表中已經寫入的資料,操作成功後可以按照需求再刪除臨時表的資料.
[color=red]3、[/color] oracle 觸發器
oracle產生資料庫觸發器的語法為:
create [or replace] trigger 觸發器名 觸發時間 觸發事件
on 表名
[for each row]
pl/sql 語句
其中:觸發器名:觸發器物件的名稱。由於觸發器是資料庫自動執行
的,因此該名稱只是乙個名稱,沒有實質的用途。
before---表示在資料庫動作之前觸發器執行;
after---表示在資料庫動作之後出發器執行。
觸發事件:指明哪些資料庫動作會觸發此觸發器:
insert:資料庫插入會觸發此觸發器;
update:資料庫修改會觸發此觸發器;
delete:資料庫刪除會觸發此觸發器。
表 名:資料庫觸發器所在的表。
for each row:對錶的每一行觸發器執行一次。如果沒有這一
選項,則只對整個表執行一次。
舉例:下面的觸發器在更新表auths之前觸發,目的是不允許在
週末修改表:
create trigger auth_secure
before insert or update or delete //對整表更新前觸發
on auths
begin
if(to_char(sysdate,'dy')='sun'
end if;
end
觸發器的一些使用
觸發器是資料庫 應用中的重用工具,它的應用很廣泛。這幾天寫乙個化學資料統計方面的軟體,需要根據取樣,自動計算方差,在這裡,我使用了觸發器。下面摘錄了sql server官方教程中的一段關於觸發器的文字,確實有用的一點文字描述。可以定義乙個無論何時用insert語句向表中插入資料時都會執行的觸發器。當...
關於觸發器的一些認知
1.什麼是觸發器,作用是什麼?觸發器是一種特殊的儲存過程,主要通過事件的觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化,可以進行聯級運算,例 你可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。2.觸發器的建立 create tri...
ORACLE觸發器 行級觸發器
行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸發器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例乙個簡單的...