Тъй като сте съставили SQL израза като низ, PLSQL машината НЕ замества името на променливата (тя е само част от литерал низ), следователно SQL машината вижда низа „V_MONTH“, но няма колона с това име, следователно невалиден идентификатор . Ако останете с динамичен SQL, ще трябва сами да направите заместване на стойност. Същото важи и за другите променливи. И така:
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);
Може също да се наложи да извършите необходимите преобразувания на формати.