永发信息网

求创建一个关于禁用/启用触发器的存储过程,

答案:2  悬赏:70  手机版
解决时间 2021-02-21 09:24
  • 提问者网友:听门外雪花风
  • 2021-02-21 05:26
要求创建一个参数,
参数状态是‘启用’的话,就把这个数据库里所有表中被禁用的触发器打开,
参数状态是‘禁用’的话,就把这个数据库里所有表中被启用的触发器关闭,
ps:目前已把查询到库中所有表的触发器,新建到了一个表A(表名,触发器名,状态)
最佳答案
  • 五星知识达人网友:痴妹与他
  • 2021-02-21 05:53
有的情况下可能需要临时禁用触发器,比如他引用的数据库对象已经失效,或者需要执行大量的数据操作
此时不希望触发器工作,以避免造成延时等等
ALTER TRIGGER <触发器名> DISABLE; 禁用某个触发器
ALTER TRIGGER <触发器名> ENABLE; 启用某个触发器
ALTER TABLE <表名> DISABLE ALL TRIGGERS; 禁用表上的所有的触发器
ALTER TABLE <表名> ENABLE ALL TRIGGERS; 启用表上的所有的触发器
*/
--创建表和触发器
DROP TABLE TESTLOG;
DROP TRIGGER MYLOGONTRIGGER;
DROP TRIGGER MYLOGOFFTRIGGER;
--创建表TESTLOG
CREATE TABLE TESTLOG(
USERNAME VARCHAr2(100),
EVENTTIME DATE,
全部回答
  • 1楼网友:举杯邀酒敬孤独
  • 2021-02-21 07:31
--禁用脚本 set serveroutput on size 10000 begin for c in (select 'alter table '||table_name||' disable constraint '||constraint_name||' ' as v_sql from user_constraints where constraint_type='r') loop dbms_output.put_line(c.v_sql); begin execute immediate c.v_sql; exception when others then dbms_output.put_line(sqlerrm); end; end loop; for c in (select 'alter table '||tname||' disable all triggers ' as v_sql from tab where tabtype='table') loop dbms_output.put_line(c.v_sql); begin execute immediate c.v_sql; exception when others then dbms_output.put_line(sqlerrm); end; end loop; end; / --启用脚本 set serveroutput on size 10000 begin for c in (select 'alter table '||table_name||' enable constraint '||constraint_name||' ' as v_sql from user_constraints where constraint_type='r') loop dbms_output.put_line(c.v_sql); begin execute immediate c.v_sql; exception when others then dbms_output.put_line(sqlerrm); end; end loop; for c in (select 'alter table '||tname||' enable all triggers ' as v_sql from tab where tabtype='table') loop dbms_output.put_line(c.v_sql); begin execute immediate c.v_sql; exception when others then dbms_output.put_line(sqlerrm); end; end loop; end; /
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯