Poiché hai composto l'istruzione SQL come una stringa, il motore PLSQL NON sostituisce il nome della variabile (la loro solo parte di una stringa letterale), quindi il motore SQL vede la stringa 'V_MONTH' ma non c'è una colonna con quel nome, quindi identificatore non valido . Se rimani con SQL dinamico dovrai eseguire tu stesso la sostituzione del valore. Lo stesso vale anche per le altre variabili. Quindi:
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);
Potrebbe anche essere necessario eseguire le conversioni di formato necessarie.