oracle - 修改多个oracle触发器

标签 oracle triggers

我有一个任务涉及更新许多触发器,这些触发器是完全相同的查询,但应用于多个不同的表。有没有办法使用 FOR 或类似的语句来更新所有这些触发器?实际上我需要做的是修改所有这些触发器的 WHEN 子句。

最佳答案

您可以使用 dbms_metadat 来实现此目的。

例如:

declare
  type arr_tab is table of varchar2(30);
  v_arr arr_tab;
  v_trig  clob;
begin
  dbms_metadata.set_transform_param( DBMS_METADATA.SESSION_TRANSFORM, 
                    'SQLTERMINATOR', FALSE );

  v_arr := arr_tab('TEST_TRIG', 'TEST2_TRIG'); -- change these triggers.
  for idx in 1..v_arr.count
  loop
    v_trig := dbms_metadata.get_ddl('TRIGGER',v_arr(idx), user);
    execute immediate regexp_replace(regexp_replace(v_trig, 'ALTER TRIGGER.*', ''), 'WHEN ([^\)]*\))', 'WHEN (1=1)', 1, 1, 'mi');
  end loop;
end;
/

'WHEN ([^\)]*\))', 'WHEN (1=1)' 部分将 WHEN 子句替换为 (在我的例子中) 何时 (1=1)

关于oracle - 修改多个oracle触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14652716/

相关文章:

oracle - Oracle 中的哈希字符串

sql - Oracle SQL : not able to add foreign key to table -> invalid identifier?

mysql - Sql查询连接两个表以获得最终输出

MYSQL - 触发器 : IF Date is null, 将日期设置为 CURDATE INTERVAL 1 天

sql-server - 有没有办法仅针对特定的执行范围禁用 SQL Server 触发器?

sql-server - Objective-C:数据库支持

Oracle 日期格式图片在转换整个输入字符串之前结束

mysql - 使用 MySQL 创建触发器,并在列名中包含连字符/破折号

c# - WPF 根据内容将标签背景设置为图像

MySQL 根据另一个日期值插入日期值 - 触发器