Protože jste SQL příkaz složili jako řetězec, PLSQL engine NEnahrazuje název proměnné (jejich pouze část doslovného řetězce), proto SQL engine vidí řetězec 'V_MONTH', ale neexistuje žádný sloupec s tímto názvem, takže neplatný identifikátor . Pokud zůstanete u dynamického SQL, budete muset provést substituci hodnoty sami. Totéž platí i pro ostatní proměnné. Takže:
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);
Možná budete muset provést všechny nezbytné převody formátu.