禁止触发器的语法为
ALTER TRIGGER triggerName DISABLE;
是ddl语句,在过程中需要用dbms_sql来执行
给你一个例子
CREATE OR REPLACE PROCEDURE
Close_trigger(triggerName IN Varchar2) AS
cursor_name INTEGER;
rows_processed INTEGER;
BEGIN
cursor_name := dbms_sql.open_cursor;
DBMS_SQL.PARSE(cursor_name, 'ALTER TRIGGER ' || triggerName || ' DISABLE',
dbms_sql.native);
DBMS_SQL.BIND_VARIABLE(cursor_name, ':x', salary);
rows_processed := dbms_sql.execute(cursor_name);
DBMS_SQL.close_cursor(cursor_name);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(cursor_name);
END;相应的调用的触发器可以这么写
CREATE OR REPLACE TRIGGER TEST
BEFORE DELETE ON tablename
begin
Close_trigger; --你的过程名
end;
-----------------------
对了,你为什么要这样。
ALTER TRIGGER triggerName DISABLE;
是ddl语句,在过程中需要用dbms_sql来执行
给你一个例子
CREATE OR REPLACE PROCEDURE
Close_trigger(triggerName IN Varchar2) AS
cursor_name INTEGER;
rows_processed INTEGER;
BEGIN
cursor_name := dbms_sql.open_cursor;
DBMS_SQL.PARSE(cursor_name, 'ALTER TRIGGER ' || triggerName || ' DISABLE',
dbms_sql.native);
DBMS_SQL.BIND_VARIABLE(cursor_name, ':x', salary);
rows_processed := dbms_sql.execute(cursor_name);
DBMS_SQL.close_cursor(cursor_name);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(cursor_name);
END;相应的调用的触发器可以这么写
CREATE OR REPLACE TRIGGER TEST
BEFORE DELETE ON tablename
begin
Close_trigger; --你的过程名
end;
-----------------------
对了,你为什么要这样。
如果是想是某个表的所有触发器都失效
alter table table_name disable all triggers;