sql >> Database >  >> RDS >> Oracle

ongeldige triggerfout

Ok, ik zal dit als antwoord plaatsen omdat reacties niet zoveel tekst toestaan.

Bij het zien van je tabellen zijn sommige dingen nog steeds niet duidelijk. jouw functie ADD_PACIENTE_QUARTO implementeert een SELECT statement met het predikaat Where PAC = CONT maar PAC bevindt zich niet in PACIENTE 's specificatie, maar is eerder de lokale variabele waar u uw resultaat opslaat en CONT is jouw parameter, het is niet duidelijk wat je daar hebt geprobeerd.

Nu heeft je trigger enkele fouten in logica en implementatie.

Allereerst is de naam van uw trigger PACIENTE_TRIGGER maar de regel INSERT OR UPDATE ON TIPO_QUARTO vertelt me ​​dat het op de TIPO_QUARTO . staat tabel, is dit syntactisch geen probleem, maar logischerwijs kan het lastig zijn voor iemand die probeert te achterhalen bij welke tafel de trigger hoort.

Gebruik vervolgens INSERT OR UPDATE OF TIPO ON TIPO_QUARTO om invoegingen te controleren of wijzigingen alleen . bij te werken in kolom TIPO van TIPO_QUARTO tafel.

Nu deze regel If :new.TIPO_QUARTO = 'UTI' then , ervan uitgaande dat deze trigger is gekoppeld aan TIPO_QUARTO tabel, die tabel heeft geen kolom met de naam TIPO_QUARTO verander dit in :new.TIPO .

Vervolgens PAC is van het type VARCHAR dus het is mij niet duidelijk wat je probeert te doen in PAC := PAC - :new.TIPO; en in PAC := PAC + :new.TIPO; beide regels geven invalid number uitzondering omdat u geen tekenreeksen kunt toevoegen of aftrekken, misschien was het uw bedoeling om samen te voegen of een subtekenreeks te krijgen.

En als laatste de oproep om UPDATE TIPO_QUARTO SET TIPO = PAC binnen een trigger voor TIPO_QUARTO zal resulteren in mutating table uitzondering, u kunt een tabel die zich in het midden van een DML-instructie bevindt (INSERT of UPDATE in dit geval) niet opvragen/bijwerken. Om dit op te lossen kunt u gewoon :new.TIPO := PAC toewijzen .

Zorg voor deze details en misschien is uw probleem dan niet meer.




  1. Automatisch opnieuw opvragen met LoaderManager

  2. BULK VERZAMEL LIMIET in UITVOEREN ONMIDDELLIJKE

  3. Doorlopende bereiken groeperen met MySQL

  4. PHP Foreach op MySQLi Resultatenset