0

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

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

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

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

4

1 回答 1

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

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

于 2013-02-13T16:20:48.603 回答