Bởi vì bạn đã soạn câu lệnh SQL dưới dạng một chuỗi, công cụ PLSQL KHÔNG thay thế cho tên biến (chỉ là một phần của chuỗi chữ), do đó, công cụ SQL nhìn thấy chuỗi 'V_MONTH' nhưng không có cột nào có tên đó do đó định danh không hợp lệ . Nếu bạn ở lại với SQL động, bạn sẽ phải tự thay thế giá trị. Điều tương tự cũng áp dụng cho các biến khác. Vì vậy:
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);
Bạn cũng có thể cần thực hiện bất kỳ chuyển đổi định dạng cần thiết nào.