【问题标题】:Trigger to replace character following insert触发以替换插入后的字符
【发布时间】:2013-02-13 16:14:48
【问题描述】:

是否可以为某个用户创建一个触发器,该触发器在将数据加载到任何表后立即替换一个字符?

例如,当用户将数据加载到表中时,我需要将 PERS_ID 列中的所有 '1' 替换为 '9'。

我是 PLSQL 的新手,所以我什至不知道从哪里开始。

我不确定我是否可以明确我的目标,所以请随时要求澄清。

【问题讨论】:

    标签: sql plsql triggers oracle11g


    【解决方案1】:

    从技术上讲,您当然可以...(为简单起见,我假设 pers_id 是字符串而不是数字——如果它是数字,您当然可以将其转换为字符串,运行replace 并将其转换回触发器中的数字)

    SQL> create table foo( pers_id varchar2(10) );
    
    Table created.
    
    SQL> create trigger replace_data
      2    before insert on foo
      3    for each row
      4  begin
      5    :new.pers_id := replace( :new.pers_id, '1', '9' );
      6  end;
      7  /
    
    Trigger created.
    
    SQL> insert into foo values( '123abc456' );
    
    1 row created.
    
    SQL> select * from foo;
    
    PERS_ID
    ----------
    923abc456
    

    然而,实际上,这个要求似乎异常奇怪。让触发器静默地更改正在插入的数据通常是一个坏主意,因为它往往会使调试异常困难。当他们插入到表中的数据与他们在查询表时看到的数据不匹配时,未来的开发人员很可能会感到相当惊讶,并且他们不太可能立即发现触发器更改了数据。如果您能描述您正在尝试解决的业务问题,我们可能会提出更合适的技术解决方案。

    【讨论】:

      猜你喜欢
      • 2019-06-07
      • 1970-01-01
      • 2017-09-12
      • 2012-03-30
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多