Oracle
 sql >> Base de données >  >> RDS >> Oracle

Erreur d'identifiant non valide pour v_MONTH dans la requête dynamique

Parce que vous avez composé l'instruction SQL sous forme de chaîne, le moteur PLSQL ne remplace PAS le nom de la variable (leur partie d'une chaîne littérale), par conséquent, le moteur SQL voit la chaîne 'V_MONTH' mais il n'y a pas de colonne de ce nom donc identifiant invalide . Si vous restez avec SQL dynamique, vous devrez effectuer vous-même la substitution de valeur. Il en va de même pour les autres variables. Donc :

  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);

Vous devrez peut-être également effectuer les conversions de format nécessaires.