創(chuàng)建兩個表:
站在用戶的角度思考問題,與客戶深入溝通,找到柯橋網(wǎng)站設(shè)計與柯橋網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋柯橋地區(qū)。
create?table?a
(stdid?int,
stdname?varchar2(10));
create?table?b
(stdid?int,
stdname?varchar2(10));
創(chuàng)建觸發(fā)器:
CREATE?OR?REPLACE?TRIGGER?tr_insert?
after?insert
ON?a
FOR?EACH?ROW?
BEGIN
INSERT?INTO?b(stdid,stdname)
VALUES(:new.stdid,:new.stdname);
END;
驗證,在a表中插入數(shù)據(jù):
insert?into?a?values?(1,'a');
commit;
驗證b表結(jié)果:
創(chuàng)建觸發(fā)器,給觸發(fā)器命名,在哪個表上的增刪改進行觸發(fā),是否為行級觸發(fā)
編寫你的邏輯
編譯檢查是否有語法錯誤啥的
測試,這里的話,就是你某一個工種的最低工資增加,那屬于這個工種的員工中原來是最低工資的也要增加,所以你要先把工種中最低工資查出來,根據(jù)工種號,查詢屬于該工種的人有哪些,把這些員工的工資查出來,再修改工種的最低工資,再查員工工資是否也增加了。
你這表也沒有,我門也沒有辦法給你寫一個很詳細的。大致思路一般是這樣
1
創(chuàng)建table1:
CREATE
TABLE
table1
(
id
number(5),
name
char(20),
age
number(2),
);
2
創(chuàng)建table2,并給count字段初值為0
CREATE
TABLE
table2
(
count
number(5),
);
INSERT
INTO
table2
VALUES
(0);
3
插入觸發(fā)器
CREATE
OR
REPLACE
TRIGGER
add_after_insert
AFTER
INSERT
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
4
刪除觸發(fā)器
CREATE
OR
REPLACE
TRIGGER
add_after_delete
AFTER
DELETE
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
5
更新觸發(fā)器
CREATE
OR
REPLACE
TRIGGER
add_after_update
AFTER
UPDATE
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
一般在sqlplus或者其他第三方oracle工具中,按照語法及需求寫好代碼,直接執(zhí)行創(chuàng)建過程即可。
一般語法如下:
CREATE?[OR?REPLACE]?TRIGGER?trigger_name
{BEFORE?|?AFTER?}
{INSERT?|?DELETE?|?UPDATE?[OF?column?[,?column?…]]}
[OR?{INSERT?|?DELETE?|?UPDATE?[OF?column?[,?column?…]]}...]
ON?[schema.]table_name?|?[schema.]view_name?
[REFERENCING?{OLD?[AS]?old?|?NEW?[AS]?new|?PARENT?as?parent}]
[FOR?EACH?ROW?]
[WHEN?condition]
PL/SQL_BLOCK?|?CALL?procedure_name;
我以前做的一個例子,你參考下吧第八章觸發(fā)器(Trigger)--格式:createorreplacetrigger名稱[after|before][delete|update|insert][on表|onschema][referencingnewas別名oldas別名][foreachrow]declare.beginexception.end;--創(chuàng)建一個delete類型行級觸發(fā)器--刪除的一行數(shù)據(jù)保存在:oldcreateorreplacetriggeremp_delete_row_triggerafterdeleteonempreferencingnewasnoldasoforeachrowbegindbms_output.put_line('emp_delete_row_triggercalled.');dbms_output.put_line('刪除員工:'||:o.empno||''||:o.ename);end;deletefromempwhereempno=7499;deletefromemp;--創(chuàng)建一個insert類型行級觸發(fā)器--插入的一行新數(shù)據(jù)保存在:newcreateorreplacetriggeremp_insert_row_triggerafterinsertonempforeachrowbegindbms_output.put_line('emp_insert_row_triggercalled.');dbms_output.put_line('添加員工:'||:new.empno||''||:new.ename);end;insertintoemp(empno,ename)values(1,'empxxx');--創(chuàng)建一個update類型行級觸發(fā)器--修改前的數(shù)據(jù)保存在:old--修改后的數(shù)據(jù)保存在:newcreateorreplacetriggeremp_update_row_triggerafterupdateonempforeachrowbegindbms_output.put_line('emp_update_row_triggercalled.');dbms_output.put_line('修改前:'||:old.empno||''||:old.ename);dbms_output.put_line('修改后:'||:new.empno||''||:new.ename);end;updateempsetename='xxxx'whereempno=7499;--語句級觸發(fā)器(update,delete,insert)createorreplacetriggerdelete_stmt_triggerafterdeleteonempbegindbms_output.put_line('delete_stmt_triggercalled.');end;deletefromemp;--判斷觸發(fā)器類型------------------------------------------------------------每進行一次交易,就要調(diào)用觸發(fā)器,自動扣除或增加賬戶金額----------------------------------------------------------createtableaccount(customerNamevarchar2(30)primarykey,cardIDvarchar2(8),currentMoneynumber);insertintoaccountvalues('Daivd','10010001',5000);insertintoaccountvalues('Jason','10010002',3000);createtabletrans(transDatedate,cardIDvarchar2(8),transTypevarchar2(10),transMoneynumber);insertintotransvalues(sysdate,'10010001','取款',1000);createorreplacetriggertrans_triggerbeforeinsertontransforeachrowdeclarev_currentMoneyaccount.currentMoney%type;begin--判斷類型if:new.transType='取款'then--取款selectcurrentMoneyintov_currentMoneyfromaccountwherecardID=:new.cardID;ifv_currentMoney:new.transMoneythenraise_application_error(-20001,'余額不足');endif;updateaccountsetcurrentMoney=currentMoney-:new.transMoneywherecardID=:new.cardID;else--存款updateaccountsetcurrentMoney=currentMoney+:new.transMoneywherecardID=:new.cardID;endif;exceptionwhenno_data_foundthenraise_application_error(-20002,'無效的帳戶');end;--模式(schema)級觸發(fā)器createorreplacetriggerschema_triggerbeforedroponschemabegindbms_output.put_line('schema_triggercalled');dbms_output.put_line(ora_dict_obj_name);dbms_output.put_line(ora_dict_obj_type);ifora_dict_obj_name='ACCOUNT'thenraise_application_error(-20003,'ACCOUNT表不能被刪除');endif;end;droptableaccount;--ora_dict_obj_name操作對象名稱--ora_dict_obj_type操作對象類型--啟用觸發(fā)器altertriggerschema_triggerenable;--禁用觸發(fā)器altertriggerschema_triggerdisable;
第二步 插入測試數(shù)據(jù)
第三步 創(chuàng)建觸發(fā)器
第四步 測試
結(jié)果如下圖