是否可以为某个用户创建一个触发器,该触发器在将数据加载到任何表后立即替换一个字符?
例如,我需要更换所有' 1'用' 9'当用户将数据加载到表中时,在PERS_ID列中显示。
我是PLSQL的新手,所以我也不知道从哪里开始。
我不确定我是否能说清楚我的目标,所以请随时要求澄清。
答案 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
然而,实际上,要求似乎异常奇怪。有一个触发器静默地更改正在插入的数据通常是一个坏主意,因为它往往使调试异常困难。当他们插入表中的数据与他们查询表时看到的数据不匹配时,未来的开发人员很可能会感到非常惊讶,他们不太可能立即发现触发器改变了数据。如果您可以描述您尝试解决的业务问题,我们可能会提出更合适的技术解决方案。