问题求助:Oracle 触发器的一个问题: 在某表执行UPDATE操作时,触发器开始执行,想获取被更新后的数据的某列,但列不固定,可以提供列名;举例说明:
LAWage被更新,那么:new.ManageCom可以获得更新后数据的该字段的值。
但是现在是列名不固定,是字符串。如何才能得到该动态列的值。
那位大虾有解决方法,谢谢赐教。
LAWage被更新,那么:new.ManageCom可以获得更新后数据的该字段的值。
但是现在是列名不固定,是字符串。如何才能得到该动态列的值。
那位大虾有解决方法,谢谢赐教。
提供一个方法:
把new的所有列的值insert到一个临时表中,这个临时表有两列,一列是列名,一列是new.colName的值。
根据你传递的列名参数,查找临时表,不就得到列值了吗。当然用指定分隔符的字符串链接列名和列值,在根据传递的列名参数拆分字符串,也可以得到列值。
但是还有个问题:
举例说明一下:
被操作的表是LAWage,列非常之多,F01,F02,....F50.那么将逐列insert到一个临时表temp时,就很麻烦了。
temp.colname:= 'F01';
temp.colname:= :new.F01;
.
.
.
temp.colname:= 'F50';
temp.colname:= :new.F50;是否有什么方法将:new很容易写入临时表temp。
但是还有个问题:
举例说明一下:
被操作的表是LAWage,列非常之多,F01,F02,....F50. 那么将逐列insert到一个临时表temp时,就很麻烦了。
temp.colname:= 'F01';
temp.colname:= :new.F01;
.
.
.
temp.colname:= 'F50';
temp.colname:= :new.F50; 是否有什么方法将:new很容易写入临时表temp。
表LAWage,列非常之多,F01,F02,....F50.
被UPDATE 时,触发器需要做的动作是:
1. 根据对当前被操作的数据进行分析,得到需要查询的列名。列名也是通过某些方法得到的字符串,比如:‘F05’;
2. 那么如何获取更新后的该条数据的列F05的值。