oracle procedure trigger小例子
oracle procedure trigger小例子
oracleproceduretrigger
Sql代码 --sql window中写存储过程(本例对dept_copy表的操作) create or replace procedure p_update_dept( l_remarker in number,--0增,1删,2改 l_deptno in number, l_dname in varchar2, l_loc in varchar2, l_result out varchar2 --传出参数 ) is begin l_result := '0000'; if l_remarker = 0 then --0 增加 insert into dept_copy values(l_deptno,l_dname,l_loc); elsif l_remarker = 1 then --1删除 delete from dept_copy p where p.deptno = l_deptno; elsif l_remarker = 2 then --2修改 update dept_copy p set p.loc = l_loc,p.dname = l_dname where p.deptno = l_deptno; end if; commit; exception when others then rollback; l_result:='1111'; end; ----------------------------------------------- --调用存储过程(主要是java中调用) -- test window中调用存储过程(可在output选项卡中看到执行返回的结果,对哪个表操作,看哪个表也能看出来。) declare -- Local variables here l_result varchar2(4); --返回值的长度是好写上 begin -- Test statements here p_update_dept(0,99,'ACCOUNTING','NEW YORK',l_result); --p_update_dept为存过程名称,括号里为存储过程定义的参数。 dbms_output.put_line(l_result); end; ========================触发器小例子=================== --行级触发器,一个表中数据发生变化时同时修改另一个表中对应字段的值 create or replace trigger trig2 after update on dept_copy for each row --针对每一行 begin update emp_copy e set e.deptno = :NEW.deptno where e.deptno = :old.deptno; end; /*当表dept_copy的deptno字段发生变化,修改对应表emp_copy的deptno字段的值 */ -- 当执行更新下表时触发器被触发 update dept_copy d set d.deptno = 99 where d.deptno = 10; --------------------------------------------------- ---语句级触发器(用的较少) create or replace trigger t_emp_copy before insert or delete or update on emp_copy begin if inserting then insert into emp_copy_log values (seq_emp_copy_log.nextval, 'insert', user, sysdate); elsif deleting then insert into emp_copy_log values (seq_emp_copy_log.nextval, 'delete', user, sysdate); elsif updating then insert into emp_copy_log values (seq_emp_copy_log.nextval, 'update', user, sysdate); end if; end;