Omdat u de SQL-instructie als een tekenreeks hebt samengesteld, vervangt de PLSQL-engine NIET de variabelenaam (hun slechts een deel van een letterlijke tekenreeks), daarom ziet de SQL-engine de tekenreeks 'V_MONTH' maar er is geen kolom met die naam, dus ongeldige identifier . Als je bij dynamische SQL blijft, zul je zelf aan waardevervanging moeten doen. Hetzelfde geldt ook voor de andere variabelen. Dus:
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);
Mogelijk moet u ook de nodige formaatconversies uitvoeren.