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.