加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 我可以直接在表的all_triggers表中界说一个触发器吗?

发布时间:2021-03-30 15:27:12 所属栏目:站长百科 来源:网络整理
导读:我正在一个复杂的数据库上执行存档进程,它涉及删除出产勾当表并将另一个表重定名为新的出产表.删除出产勾当表时,触发器也会被删除.以是我只是行使我的桌面上界说的触发器的备份 select_ from all_triggers table_name = mytablename; 我的题目是,在将其他表

我正在一个复杂的数据库上执行存档进程,它涉及删除出产勾当表并将另一个表重定名为新的出产表.删除出产勾当表时,触发器也会被删除.以是我只是行使我的桌面上界说的触发器的备份
select_ from all_triggers table_name = mytablename;
我的题目是,在将其他表重定名为新的出产勾当表后,是否可以直接将这些触发器复制到all_triggers表中?触发器如故有用吗?
界说索引和束缚的题目也一样.

办理要领

将触发器从一个表复制到另一个表可以通过复制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;
/

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读