实现功能:删除当前用户下 触发器名中含有TEST的所有触发器(我的当前用户下含有AIR_TEST2、AIR_TEST这两个触发器)  1  declare
  2     dyn_str varchar2(100);
  3     a_tri_name varchar2(100);
  4  begin
  5     for tri_idx in (select trigger_name from user_triggers) loop
  6             a_tri_name:=tri_idx.trigger_name;
  7             dyn_str:='drop trigger :1';
  8             if a_tri_name like '%TEST%' then
  9                     dbms_output.put_line(a_tri_name);
 10                     execute immediate dyn_str using a_tri_name;
 11             end if;
 12     end loop;
 13* end;
SQL> /
AIR_TEST2
declare
*
第 1 行出现错误:
ORA-04070: 无效的触发器名
ORA-06512: 在 line 10

解决方案 »

  1.   

    改一下:
     declare
        dyn_str varchar2(100);
       a_tri_name varchar2(100);
     begin
     for tri_idx in (select trigger_name from user_triggers) loop
            a_tri_name:=tri_idx.trigger_name;
               if a_tri_name like '%TEST%' then
                        dbms_output.put_line(a_tri_name);
                        dyn_str:='drop trigger '||a_tri_name;
                        execute immediate dyn_str;
               end if;
      end loop;
    end;
      

  2.   

    说明一下出错的原因, SQL操作的对象名(触发器、表等等)不能使用绑定变量。
      

  3.   


    SQL操作的对象名(触发器、表等等)不能使用绑定变量
      

  4.   


      SELECT * FROM TAB;