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

触发器里调用存储过程或函数的问题
我想在触发器里调用一个存储过程或者是函数,要以该触发器的表名为存储过程或函数的参数,如:

create table a
(aa number(10),
 bb number(10)
);
/

create or replace trigger a_tri
before insert on a
for each row
begin
  --proc 做为存储过程名
  proc(a);--a是表名同时做为存储过程的参数传递。
end;


想实现这样的一个触发器,我该怎么做?

------解决方案--------------------
引用:
我想在触发器里调用一个存储过程或者是函数,要以该触发器的表名为存储过程或函数的参数,如:

create table a
(aa number(10),
 bb number(10)
);
/

create or replace trigger a_tri
before insert on a
for each row
begin
  --proc 做为存储过程名
  proc(a);--a是表名同时做为存储过程的参数传递。
end;


想实现这样的一个触发器,我该怎么做?


create or replace trigger a_tri
  before insert on A
  for each row
    declare
    t_name varchar2(10);
begin
  --proc 做为存储过程名 
    select t.table_name into t_name from all_triggers t where t.trigger_name='A_TRI';
    proc(T_NAME);--a是表名同时做为存储过程的参数传递。
 end;

------解决方案--------------------
请问你在定义触发器的时候你还不知道作用在哪个表?
所以你在下面调用存储过程的时候已经可以直接写表名。
------解决方案--------------------
select 'a' into t_name from dual;
这样可以吗