Karena Anda menyusun pernyataan SQL sebagai string, mesin PLSQL TIDAK menggantikan nama variabel (hanya bagian dari string literal), oleh karena itu mesin SQL melihat string 'V_MONTH' tetapi tidak ada kolom dengan nama itu sehingga pengidentifikasi tidak valid . Jika Anda tetap menggunakan SQL dinamis, Anda harus melakukan substitusi nilai sendiri. Hal yang sama juga berlaku untuk variabel lainnya. Jadi:
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);
Anda mungkin juga perlu melakukan konversi format yang diperlukan.