Fordi du komponerede SQL-sætningen som en streng, erstatter PLSQL-motoren IKKE variabelnavnet (deres kun en del af en bogstavelig streng), derfor ser SQL-motoren strengen 'V_MONTH', men der er ingen kolonne med det navn og derfor ugyldig identifikator . Hvis du forbliver med dynamisk SQL, skal du selv foretage værdisubstitution. Det samme gælder også for de øvrige variable. Så:
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);
Du skal muligvis også foretage de nødvendige formatkonverteringer.