ORACLE觸發器的一些知識

2021-08-22 07:41:52 字數 1386 閱讀 7509

[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會話中建立和示例乙個簡單的...