要求创建一个参数,
参数状态是‘启用’的话,就把这个数据库里所有表中被禁用的触发器打开,
参数状态是‘禁用’的话,就把这个数据库里所有表中被启用的触发器关闭,
ps:目前已把查询到库中所有表的触发器,新建到了一个表A(表名,触发器名,状态)
求创建一个关于禁用/启用触发器的存储过程,
答案:2 悬赏:70 手机版
解决时间 2021-02-21 09:24
- 提问者网友:听门外雪花风
- 2021-02-21 05:26
最佳答案
- 五星知识达人网友:痴妹与他
- 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,
此时不希望触发器工作,以避免造成延时等等
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;
/
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯