当前位置:数据库 > Oracle >>

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;  

 


CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,