sql >> Databasteknik >  >> RDS >> Oracle

Ogiltigt identifierarfel för v_MONTH i dynamisk fråga

Eftersom du komponerade SQL-satsen som en sträng, ersätter PLSQL-motorn INTE variabelnamnet (deras bara en del av en bokstavlig sträng), därför ser SQL-motorn strängen 'V_MONTH' men det finns ingen kolumn med det namnet och därför är en ogiltig identifierare . Om du stannar med dynamisk SQL måste du göra värdesubstitution själv. Detsamma gäller även de andra variablerna. Så:

  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);

Du kan också behöva göra nödvändiga formatkonverteringar.




  1. UPPDATERA flera tabeller i MySQL med LEFT JOIN

  2. formulärpass väljs till nästa sida

  3. Hur simulerar man 32-bitars signerat heltalsspill i PL/SQL?

  4. mysql:kontrollera datumintervall