a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

oracle文檔第九章觸發(fā)器(1)

2024-08-29 13:53:46
字體:
供稿:網(wǎng)友
第九章節(jié) :觸發(fā)器編碼

    觸發(fā)器是存儲(chǔ)在數(shù)據(jù)庫存中隱式的運(yùn)行或者被觸發(fā)的一段程序,當(dāng)某些事件發(fā)生。通常情況下,觸發(fā)器中支持可執(zhí)行的一段pl/sql代碼塊,當(dāng)一個(gè)insert,update,或者delete命名發(fā)生在一個(gè)表或者視圖上的時(shí)候。其也支持系統(tǒng)和數(shù)據(jù)庫或者方案事件.Oracle數(shù)據(jù)庫也支持觸發(fā)器中含有可執(zhí)行的pl/sql或java程序.

    該章節(jié)討論dml觸發(fā)器,instead of 觸發(fā)器和系統(tǒng)觸發(fā)器(數(shù)據(jù)庫/方案觸發(fā)器),內(nèi)容如下:

設(shè)計(jì)觸發(fā)器
創(chuàng)建觸發(fā)器
觸發(fā)器核心代碼
編譯觸發(fā)器
修改已有的觸發(fā)器
(enabling and disabling triggers)使用和[disabling]角發(fā)器
查看觸發(fā)器相關(guān)的信息
觸發(fā)器實(shí)例代碼
用觸發(fā)器響應(yīng)[responding]系統(tǒng)事件
     9.1設(shè)計(jì)觸發(fā)器

         在設(shè)計(jì)觸發(fā)器時(shí),使用下列設(shè)計(jì)原則

觸發(fā)器用來保證當(dāng)一個(gè)特定的操作被執(zhí)行時(shí),和該操作相關(guān)的動(dòng)作也被執(zhí)行。
當(dāng)一個(gè)重復(fù)[duplicate]功能在數(shù)據(jù)庫中存在,此時(shí)要避免使用觸發(fā)器。例如,如果能用數(shù)據(jù)完敕性約束來實(shí)現(xiàn)維不合法的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫時(shí),就沒有必要使用觸發(fā)器來實(shí)現(xiàn)相同的功能。[refect]拒絕
限制觸發(fā)器程序代碼的大小,如果觸發(fā)器的實(shí)現(xiàn)邏輯需要超過60行代碼,那么最好把大量的代碼存儲(chǔ)在一個(gè)存儲(chǔ)過程中,然后在觸發(fā)器中調(diào)用該存儲(chǔ)過程。
regardless of[無論] 無論是用戶或者數(shù)據(jù)庫[issues]觸發(fā)器事件,觸發(fā)器是僅僅用來[centralized]集中公共的操作被調(diào)用。
不要?jiǎng)?chuàng)建[recursive]遞歸性的觸發(fā)器。如,創(chuàng)建一個(gè)在Emp_tab after update語名的觸發(fā)器,在該表中又定義了一個(gè)update 語句,使該觸發(fā)器遞補(bǔ)歸的被調(diào)用直到內(nèi)存溢出。
要明知[judiciously]的用觸發(fā)器,它在每個(gè)用戶,任何時(shí)間被執(zhí)行,當(dāng)事件發(fā)生在已經(jīng)定義好的觸發(fā)器上.
      9.2創(chuàng)建觸發(fā)器

          可以使用任何[interactive]互相交互的工具,如sql*plus 或enterPRise manager,用CREATE TRIGGER statement命令來創(chuàng)建.在使用交互工具編寫完觸發(fā)器時(shí),在程序末尾加上('/')字符是[necessary]必要的,來使剛創(chuàng)建的觸發(fā)器激活[activate]。

        如下命令在emp_tab表上創(chuàng)建一個(gè)觸發(fā)器:

  CREATE OR REPLACE TRIGGER Print_salary_changes
      BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
      FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
    sal_diff number;
BEGIN
    sal_diff  := :new.sal  - :old.sal;
    dbms_output.put('Old salary: ' || :old.sal);
    dbms_output.put('  New salary: ' || :new.sal);
    dbms_output.put_line('  Difference ' || sal_diff);
END;
/

當(dāng)dml操作(insert,update,delete 命令)在該表上時(shí),該觸發(fā)器被觸發(fā),你可以選擇組合方式觸發(fā)事件來觸發(fā)它。

因?yàn)樵撚|發(fā)器用了BEFOR關(guān)鍵字,它能在新值存儲(chǔ)表之間可以訪問新值或如果新值被表示有簡單的錯(cuò)誤時(shí),還能修改新值。

如果你想讓觸發(fā)器查詢或修改同樣表的數(shù)據(jù)時(shí),可以用AFTER關(guān)鍵字。because triggers can only do that after the initial changes are applied and the table is back in a consistent state.

因?yàn)樵撚|發(fā)器用了FOR EACH ROW 從句,這可以被執(zhí)行多次,如當(dāng)更新或刪除多個(gè)行時(shí).如你僅僅想記錄發(fā)生操作的the face,就可以[omit] 省略for each row關(guān)鍵字,但是不使用該數(shù)據(jù)為每行記錄.

一但,觸發(fā)器被創(chuàng)建,輸入下面sql命令

UPDATE Emp_tab SET sal = sal + 500.00 WHERE deptno = 10;當(dāng)該觸發(fā)器一但被觸發(fā),每行被更新,在打印從句,打印新的薪水,以前薪水,和它們之間的不同.如果在pl/sql塊中存在任何錯(cuò)誤,create(或create或replace)命令執(zhí)行失敗.  注:觸發(fā)器程序代碼的大小不能超過32kb;

下面部分使用實(shí)例來[illustrate]說明觸發(fā)器部分使用方法

  看其它:

   "Examples of Trigger applications" for more realistic examples of CREATE TRIGGER statements



9.2.1 觸發(fā)器類型

  觸發(fā)器可以包含pl/sql塊,或一個(gè)pl/sql,c或java程序和表,視圖,方案或數(shù)據(jù)庫自身關(guān)聯(lián).

當(dāng)一個(gè)特殊事件發(fā)生,Oracle數(shù)據(jù)自動(dòng)執(zhí)行觸發(fā)器,[ which may be in the form of a system event or a DML statement being issued against the table.]

觸發(fā)器作用對象:

l          Dml觸發(fā)器作用在表

l          Instead of 觸發(fā)器可以作用在視圖

l          System 觸發(fā)器作用在數(shù)據(jù)庫/方案.用database,觸發(fā)器觸發(fā)每個(gè)事件為所有用戶,用Schem,觸發(fā)器被特定的用戶觸發(fā)

See also:

  Oracle Database SQL Reference for information on trigger creation syntax

9.2.2 系統(tǒng)事件

   你可以創(chuàng)建下列任何事件來觸發(fā)的觸發(fā)器
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲精品永久免费 | 日韩激情网 | 亚洲一区二区三区视频免费观看 | 国产一级在线 | 黄色免费看网站 | 一级全黄少妇性色生活片毛片 | 国产精品69久久久久水密桃 | 中午字幕在线观看 | 黄页网址免费观看 | 日韩中文在线 | 久久久久18| 91精品国产综合久久久久久丝袜 | 中文字幕在线免费视频 | 国产精品久久久久蜜臀 | 免费不卡一区 | 在线干| 精品日韩欧美一区二区三区在线播放 | 国产精品伦理一区二区 | 少妇激烈床戏视频 | 一级欧美片 | 亚洲免费视频在线观看 | 日本激情视频在线播放 | 精品日韩在线 | 成人久久久久 | 久久视频在线 | 青草视频在线观看视频 | 国产精品欧美日韩在线观看 | 欧美日韩成人免费 | 亚洲精品影院 | 精品黄网| 日日骚视频 | 精品乱码一区二区 | 最新色站 | 久久亚洲精品国产亚洲老地址 | 亚洲精品视频免费观看 | 久久久久久久国产 | 欧美一区二区三区的 | 中文字幕精品一区久久久久 | 日韩大尺度在线观看 | 国产精品成人在线观看 | 日本一区二区在线播放 |