oracle触发器中如何调用有返回值的过程?
公司一触发器a的代码已经超过8000,系统提示代码过长编译错误.
目前的做法是分拆成两个做法.a,a1
出于成本考虑,我想将它改写成触发器 将a1 改写为过程 prod_a1(a in char,..... , g out int)
其中g 为0/1 0 代表过程中无任一模块发生异常,1 代表有 (目前不用,只是作为扩展功能预留的)
我现在不知道触发器要怎么调用外部过程,并得到返回值???
请大哥多教教.
------解决方案--------------------那很简单呀,
create or replace trigger a
before ... on ....
declare
g int;
a varchar2;
.....
begin
.........(把你的参数赋值)
prod_a1(a,..... , g)
if g=1 then
...
end if;
.......
end a;
直接把存储过程放在那里就行了,输出参数执行完了就能用
------解决方案--------------------1 create or replace procedure p_test(id number,name out varchar2) as
2 begin
3 dbms_output.put_line( 'p_test executed ');
4 name := 'rr ';
5* end;
SQL> /
过程已创建。
SQL> create or replace trigger t_test before insert on test
2 declare
3 v_name varchar2(20);
4 begin
5 p_test(1,v_name);
6 dbms_output.put_line( 'trigger executed ');
7 end;
8 /
触发器已创建
SQL> insert into test values(5, 'ggg ');
已创建 1 行。
SQL> set serveroutput on
SQL> insert into test values(5, 'ggg ');
p_test executed
trigger executed
已创建 1 行。
SQL>