Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ungültiger Bezeichnerfehler für v_MONTH in dynamischer Abfrage

Da Sie die SQL-Anweisung als Zeichenfolge verfasst haben, ersetzt die PLSQL-Engine den Variablennamen NICHT (sie ist nur ein Teil einer Literalzeichenfolge). Daher sieht die SQL-Engine die Zeichenfolge „V_MONTH“, aber es gibt keine Spalte mit diesem Namen, also eine ungültige Kennung . Wenn Sie bei dynamischem SQL bleiben, müssen Sie die Werteersetzung selbst vornehmen. Dasselbe gilt auch für die anderen Variablen. Also:

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

Möglicherweise müssen Sie auch alle erforderlichen Formatkonvertierungen vornehmen.