现要在存储过程中更新一个表,但更新项目是由俩部分组成的,比如:项目字段为;NFLAG01到NFLAG09,但是现在只是能确定NFLAG,不能确定01或02或03。。,要通过处理进行读取,但是在执行的时候提示不能使用虚拟列。
Tn_NFLAG := Tn_NFLAG + convert(Tn_NKOMOKUNO,Ws_KomokuNo);
UPDATE
XCKOMOKUFLG
SET
                                      Tn_NFLAG = Tn_Temp
WHERE
CCOMPKB = Ps_COMPKB
AND CQTAIKEIKB = Ps_QTAIKEIKB
AND NQSHOYOKB = Pn_QSHOYOKB
AND NSIQKOJOKB = Pn_SIQKOJOKB
AND NDATAKB = Ws_LnCnt;
 
ORA-01733: 此处不允许虚拟列 应该如何取得对应的字段名?

解决方案 »

  1.   

    动态sql:
      execute immediate 'UPDATE
    XCKOMOKUFLG
    SET ' || Tn_NFLAG || '=' || Tn_Temp || ' WHERE
    CCOMPKB =' || Ps_COMPKB || ' AND CQTAIKEIKB = ' ||
                        Ps_QTAIKEIKB || ' AND NQSHOYOKB = ' || Pn_QSHOYOKB ||
                        ' AND NSIQKOJOKB =' || Pn_SIQKOJOKB || ' AND NDATAKB =' ||
                        Ws_LnCnt;
      

  2.   

    动态sql  楼上的已经比较详细了  也可以调用dbms_sql包