是否可以为某个用户创建一个触发器,该触发器在将数据加载到任何表后立即替换一个字符?
例如,当用户将数据加载到表中时,我需要将 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
然而,实际上,这个要求似乎异常奇怪。让触发器默默地更改正在插入的数据通常是一个坏主意,因为它往往会使调试异常困难。当他们插入到表中的数据与他们在查询表时看到的数据不匹配时,未来的开发人员很可能会感到相当惊讶,并且他们不太可能立即发现触发器更改了数据。如果您可以描述您正在尝试解决的业务问题,我们可能会提出更合适的技术解决方案。