触发器以替换插入后的字符



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

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

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

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

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

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

最新更新