oracle – 我可以直接在表的all_triggers表中定义一个触发器吗?
发布时间:2021-03-30 15:35:33 所属栏目:站长百科 来源:网络整理
导读:我正在一个庞大的数据库上执行存档过程,它涉及删除生产活动表并将另一个表重命名为新的生产表.删除生产活动表时,触发器也会被删除.所以我只是使用我的桌面上定义的触发器的备份 select_ from all_triggers table_name = mytablename; 我的问题是,在将其他表
我正在一个庞大的数据库上执行存档过程,它涉及删除生产活动表并将另一个表重命名为新的生产表.删除生产活动表时,触发器也会被删除.所以我只是使用我的桌面上定义的触发器的备份
解决方法将触发器从一个表复制到另一个表可以通过复制DDL而不是更新all_triggers表来完成.这可以通过使用DBMS_METADATA来完成.我在这里找到的最接近的实际例子:Copy Triggers when you Copy a Table 可以根据需要修改以下脚本: declare p_src_tbl varchar2(30):= 'PERSONS'; --your table name p_trg_tbl varchar2(30):= 'PSN2'; --your trigger name l_ddl varchar2(32000); begin execute immediate 'create table '||p_trg_tbl||' as select * from '||p_src_tbl||' where 1=2'; for trg in (select trigger_name from user_triggers where table_name = p_src_tbl) loop l_ddl:= cast(replace(replace(dbms_metadata.get_ddl( 'TRIGGER',trg.trigger_name),p_src_tbl,p_trg_tbl),trg.trigger_name,substr(p_trg_tbl||trg.trigger_name,1,30)) as varchar2); execute immediate substr(l_ddl,instr(l_ddl,'ALTER TRIGGER')-1); end loop; end; / (编辑:通辽站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |