Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Erro de identificador inválido para v_MONTH na consulta dinâmica


Como você compôs a instrução SQL como uma string, o mecanismo PLSQL NÃO substitui o nome da variável (apenas parte de uma string literal), portanto, o mecanismo SQL vê a string 'V_MONTH', mas não há coluna com esse nome, portanto, identificador inválido . Se você ficar com SQL dinâmico, terá que fazer a substituição de valor por conta própria. O mesmo também se aplica às outras variáveis. Então:
  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);

Você também pode precisar fazer as conversões de formato necessárias.