问题求助:Oracle 触发器的一个问题: 在某表执行UPDATE操作时,触发器开始执行,想获取被更新后的数据的某列,但列不固定,可以提供列名;举例说明:
LAWage被更新,那么:new.ManageCom可以获得更新后数据的该字段的值。
但是现在是列名不固定,是字符串。如何才能得到该动态列的值。
 那位大虾有解决方法,谢谢赐教。

解决方案 »

  1.   


    提供一个方法:
    把new的所有列的值insert到一个临时表中,这个临时表有两列,一列是列名,一列是new.colName的值。
    根据你传递的列名参数,查找临时表,不就得到列值了吗。当然用指定分隔符的字符串链接列名和列值,在根据传递的列名参数拆分字符串,也可以得到列值。
      

  2.   

    oracledbalgtu的回答非常感谢。 
    但是还有个问题: 
    举例说明一下: 
    被操作的表是LAWage,列非常之多,F01,F02,....F50.那么将逐列insert到一个临时表temp时,就很麻烦了。 
    temp.colname:= 'F01';
    temp.colname:= :new.F01;
    .
    .
    .
    temp.colname:= 'F50';
    temp.colname:= :new.F50;是否有什么方法将:new很容易写入临时表temp。
      

  3.   

    oracledbalgtu的回答非常感谢。 
    但是还有个问题: 
    举例说明一下: 
    被操作的表是LAWage,列非常之多,F01,F02,....F50. 那么将逐列insert到一个临时表temp时,就很麻烦了。 
    temp.colname:= 'F01'; 
    temp.colname:= :new.F01; 



    temp.colname:= 'F50'; 
    temp.colname:= :new.F50; 是否有什么方法将:new很容易写入临时表temp。
      

  4.   

    我觉得我已经说的很详细了: 
    表LAWage,列非常之多,F01,F02,....F50. 
    被UPDATE 时,触发器需要做的动作是:
    1. 根据对当前被操作的数据进行分析,得到需要查询的列名。列名也是通过某些方法得到的字符串,比如:‘F05’;
    2. 那么如何获取更新后的该条数据的列F05的值。