国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
Oracle觸發(fā)器語(yǔ)法(三)

Oracle觸發(fā)器語(yǔ)法

觸發(fā)器是特定事件出現(xiàn)的時(shí)候,自動(dòng)執(zhí)行的代碼塊。類似于存儲(chǔ)過(guò)程,觸發(fā)器與存儲(chǔ)過(guò)程的區(qū)別在于:存儲(chǔ)過(guò)程是由用戶或應(yīng)用程序顯式調(diào)用的,而觸發(fā)器是不能被直接調(diào)用的。

功能:

1、 允許/限制對(duì)表的修改

2、 自動(dòng)生成派生列,比如自增字段

3、 強(qiáng)制數(shù)據(jù)一致性

4、 提供審計(jì)和日志記錄

5、 防止無(wú)效的事務(wù)處理

6、 啟用復(fù)雜的業(yè)務(wù)邏輯

觸發(fā)器觸發(fā)時(shí)間有兩種:after和before。

1、觸發(fā)器的語(yǔ)法:

CREATE [OR REPLACE] TIGGER觸發(fā)器名 觸發(fā)時(shí)間 觸發(fā)事件

ON表名

[FOR EACH ROW]

BEGIN

pl/sql語(yǔ)句

END

其中:

觸發(fā)器名:觸發(fā)器對(duì)象的名稱。

由于觸發(fā)器是數(shù)據(jù)庫(kù)自動(dòng)執(zhí)行的,因此該名稱只是一個(gè)名稱,沒(méi)有實(shí)質(zhì)的用途。

觸發(fā)時(shí)間:指明觸發(fā)器何時(shí)執(zhí)行,該值可?。?/span>

before---表示在數(shù)據(jù)庫(kù)動(dòng)作之前觸發(fā)器執(zhí)行;

after---表示在數(shù)據(jù)庫(kù)動(dòng)作之后出發(fā)器執(zhí)行。

觸發(fā)事件:指明哪些數(shù)據(jù)庫(kù)動(dòng)作會(huì)觸發(fā)此觸發(fā)器:                        

insert:數(shù)據(jù)庫(kù)插入會(huì)觸發(fā)此觸發(fā)器; 

Oracle觸發(fā)器語(yǔ)法(二)

 

update:數(shù)據(jù)庫(kù)修改會(huì)觸發(fā)此觸發(fā)器;

delete:數(shù)據(jù)庫(kù)刪除會(huì)觸發(fā)此觸發(fā)器。

表 名:數(shù)據(jù)庫(kù)觸發(fā)器所在的表。

for each row:對(duì)表的每一行觸發(fā)器執(zhí)行一次。如果沒(méi)有這一選項(xiàng),則只對(duì)整個(gè)表執(zhí)行一次。

2、舉例:

下面的觸發(fā)器在更新表auths之前觸發(fā),目的是不允許在周末修改表:

      create triggerauth_secure before insert or update or delete //對(duì)整表更新前觸發(fā)

 

on auths

begin

if(to_char(sysdate,'DY')='SUN'

RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');

end if;

end

例子:

  CREATE OR REPLACE TRIGGER CRM.T_SUB_USERINFO_AUR_NAME AFTER UPDATE OF STAFF_NAME

 

ON CRM.T_SUB_USERINFO

REFERENCING OLD AS OLD NEW AS NEW

FOR EACH ROW

declare

begin

if :NEW.STAFF_NAME!=:OLD.STAFF_NAME then

begin

  • 客戶投訴 

  update T_COMPLAINT_MANAGE set SERVE_NAME=:NEW.STAFF_NAME where SERVE_SEED=:OLD.SEED;

  • 客戶關(guān)懷

      update T_CUSTOMER_CARE set EXECUTOR_NAME=:NEW.STAFF_NAME

 

where EXECUTOR_SEED=:OLD.SEED;

  • 客戶服務(wù) 

      update T_CUSTOMER_SERVICE set EXECUTOR_NAME=:NEW.STAFF_NAME

 

where EXECUTOR_SEED=:OLD.SEED;

end;

end if;

end T_sub_userinfo_aur_name;

/



Oracle觸發(fā)器詳解

開(kāi)始:

      create triggerbiufer_employees_department_id

 

beforeinsertorupdateofdepartment_idonemployees

referencingoldasold_value newasnew_value

for each row

when (new_value.department_id<>80 )

begin

:new_value.commission_pct :=0;

end;

/

1、觸發(fā)器的組成部分:

1、 觸發(fā)器名稱

2、 觸發(fā)語(yǔ)句

3、 觸發(fā)器限制

4、 觸發(fā)操作

1.1、觸發(fā)器名稱

      create trigger biufer_employees_department_id

命名習(xí)慣:

      biufer(before insert update for each row)

employees表名

department_id列名

1.2、觸發(fā)語(yǔ)句

比如:

表或視圖上的DML語(yǔ)句

DDL語(yǔ)句
 Oracle觸發(fā)器語(yǔ)法(四)

 

數(shù)據(jù)庫(kù)關(guān)閉或啟動(dòng),startup shutdown等等 

      before insert or update

 

of department_id

on employees

referencing old as old_value

new as new_value

for each row

說(shuō)明:

1、 無(wú)論是否規(guī)定了department_id,對(duì)employees表進(jìn)行insert的時(shí)候

2、 對(duì)employees表的department_id列進(jìn)行update的時(shí)候

1.3、觸發(fā)器限制

      when (new_value.department_id<>80 )

限制不是必須的。此例表示如果列department_id不等于80的時(shí)候,觸發(fā)器就會(huì)執(zhí)行。

其中的new_value是代表更新之后的值。

1.4、觸發(fā)操作

是觸發(fā)器的主體 

      begin

 

:new_value.commission_pct :=0;

end;

主體很簡(jiǎn)單,就是將更新后的commission_pct列置為0

觸發(fā):

      insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,

 

department_id,salary,commission_pct )

values( 12345,’Chen’,’Donny’, sysdate, 12, ‘donny@hotmail.com’,60,10000,.25);

select commission_pct from employees where employee_id=12345;

觸發(fā)器不會(huì)通知用戶,便改變了用戶的輸入值。Oracle觸發(fā)器語(yǔ)法(四)

 

數(shù)據(jù)庫(kù)關(guān)閉或啟動(dòng),startup shutdown等等 

      before insert or update

 

of department_id

on employees

referencing old as old_value

new as new_value

for each row

說(shuō)明:

1、 無(wú)論是否規(guī)定了department_id,對(duì)employees表進(jìn)行insert的時(shí)候

2、 對(duì)employees表的department_id列進(jìn)行update的時(shí)候

1.3、觸發(fā)器限制

      when (new_value.department_id<>80 )

限制不是必須的。此例表示如果列department_id不等于80的時(shí)候,觸發(fā)器就會(huì)執(zhí)行。

其中的new_value是代表更新之后的值。

1.4、觸發(fā)操作

是觸發(fā)器的主體 

      begin

 

:new_value.commission_pct :=0;

end;

主體很簡(jiǎn)單,就是將更新后的commission_pct列置為0

觸發(fā):

      insert into employees(employee_id,last_name,first_name,hire_date,job_id,email,

 

department_id,salary,commission_pct )

values( 12345,’Chen’,’Donny’, sysdate, 12, ‘donny@hotmail.com’,60,10000,.25);

select commission_pct from employees where employee_id=12345;

觸發(fā)器不會(huì)通知用戶,便改變了用戶的輸入值。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
總結(jié)下Oracle 中的Insert用法
第7章數(shù)據(jù)操縱與事務(wù)處理
Oracle EBS Alert 警告
利用oracle快照dblink解決數(shù)據(jù)庫(kù)表同步問(wèn)題 - - JavaEye技術(shù)網(wǎng)站
轉(zhuǎn)貼:SQL SERVER面試題1
oracle中的觸發(fā)器的定義
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服