Oracle中存储器(procedure)和触发器(trigger)的小例子

  --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;


当然这只是些小例子,真正开发中用到的比这难多了,不过把原理搞清楚,都不难

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值