日期:2014-05-17  浏览次数:21326 次

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>