触发以替换插入后的字符

时间:2013-02-13 16:14:49

标签: sql plsql triggers oracle11g

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

例如,我需要更换所有' 1'用' 9'当用户将数据加载到表中时,在PERS_ID列中显示。

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

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

1 个答案:

答案 0 :(得分:3)

从技术上讲,你当然可以...(为简单起见,我假设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

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

相关问题