sql >> Base de Datos >  >> RDS >> Oracle

Error de identificador no válido para v_MONTH en consulta dinámica

Debido a que compuso la declaración SQL como una cadena, el motor PLSQL NO sustituye el nombre de la variable (solo es parte de una cadena literal), por lo tanto, el motor SQL ve la cadena 'V_MES' pero no hay ninguna columna con ese nombre, por lo tanto, el identificador no es válido. . Si te quedas con SQL dinámico, tendrás que hacer la sustitución de valores tú mismo. Lo mismo se aplica a las demás variables. Entonces:

  EXECUTE IMMEDIATE UTL_LMS.FORMAT_MESSAGE(
  'UPDATE /*+ index(a LEDGER_STAT_DLY_IDX02_IN) */ LEDGER_STAT_DLY A
      SET %s =  NVL(%s,0) + NVL(%s ,0)
    WHERE IDENTITY_CODE =  NVL(%s ,0)
      AND YEAR_S =  NVL(%s ,0)
      AND MONTH_NO = NVL(%s ,0)'
     ,V_TARGET_COLUMN, V_TARGET_COLUMN ,V_AMOUNT,V_IDENTITY_CODE,V_YEAR_S,V_MONTH);

Es posible que también deba realizar las conversiones de formato necesarias.