创建两个表:
站在用户的角度思考问题,与客户深入沟通,找到柯桥网站设计与柯桥网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、做网站、企业官网、英文网站、手机端网站、网站推广、域名注册、网络空间、企业邮箱。业务覆盖柯桥地区。
create table a
(stdid int,
stdname varchar2(10));
create table b
(stdid int,
stdname varchar2(10));
创建触发器:
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表中插入数据:
insert into a values (1,'a');
commit;
验证b表结果:
创建触发器,给触发器命名,在哪个表上的增删改进行触发,是否为行级触发
编写你的逻辑
编译检查是否有语法错误啥的
测试,这里的话,就是你某一个工种的最低工资增加,那属于这个工种的员工中原来是最低工资的也要增加,所以你要先把工种中最低工资查出来,根据工种号,查询属于该工种的人有哪些,把这些员工的工资查出来,再修改工种的最低工资,再查员工工资是否也增加了。
你这表也没有,我门也没有办法给你写一个很详细的。大致思路一般是这样
1
创建table1:
CREATE
TABLE
table1
(
id
number(5),
name
char(20),
age
number(2),
);
2
创建table2,并给count字段初值为0
CREATE
TABLE
table2
(
count
number(5),
);
INSERT
INTO
table2
VALUES
(0);
3
插入触发器
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
删除触发器
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
更新触发器
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工具中,按照语法及需求写好代码,直接执行创建过程即可。
一般语法如下:
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;
我以前做的一个例子,你参考下吧第八章触发器(Trigger)--格式:createorreplacetrigger名称[after|before][delete|update|insert][on表|onschema][referencingnewas别名oldas别名][foreachrow]declare.beginexception.end;--创建一个delete类型行级触发器--删除的一行数据保存在:oldcreateorreplacetriggeremp_delete_row_triggerafterdeleteonempreferencingnewasnoldasoforeachrowbegindbms_output.put_line('emp_delete_row_triggercalled.');dbms_output.put_line('删除员工:'||:o.empno||''||:o.ename);end;deletefromempwhereempno=7499;deletefromemp;--创建一个insert类型行级触发器--插入的一行新数据保存在: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');--创建一个update类型行级触发器--修改前的数据保存在:old--修改后的数据保存在: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;--语句级触发器(update,delete,insert)createorreplacetriggerdelete_stmt_triggerafterdeleteonempbegindbms_output.put_line('delete_stmt_triggercalled.');end;deletefromemp;--判断触发器类型------------------------------------------------------------每进行一次交易,就要调用触发器,自动扣除或增加账户金额----------------------------------------------------------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)级触发器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操作对象类型--启用触发器altertriggerschema_triggerenable;--禁用触发器altertriggerschema_triggerdisable;
第二步 插入测试数据
第三步 创建触发器
第四步 测试
结果如下图