sql >> Databasteknik >  >> RDS >> Oracle

ogiltigt triggerfel

Ok, jag lägger upp det här som ett svar eftersom kommentarer inte tillåter så mycket text.

När du ser dina tabeller är vissa saker fortfarande otydliga. din funktion ADD_PACIENTE_QUARTO implementerar en SELECT sats som anger predikatet Where PAC = CONT men PAC finns inte i PACIENTE s specifikation utan är snarare den lokala variabeln där du lagrar ditt resultat och CONT är din parameter, är det inte klart vad du försökte där.

Nu har din trigger några brister i logik och implementering.

Först och främst är utlösarens namn PACIENTE_TRIGGER men raden INSERT OR UPDATE ON TIPO_QUARTO säger att det finns på TIPO_QUARTO tabell, detta är inte ett problem syntaktiskt men logiskt sett kan det vara jobbigt för någon som försöker ta reda på vilket bord utlösaren tillhör.

Använd sedan INSERT OR UPDATE OF TIPO ON TIPO_QUARTO för att övervaka infogningar eller uppdatera ändringar endast i kolumnen TIPO av TIPO_QUARTO bord.

Nu den här raden If :new.TIPO_QUARTO = 'UTI' then , förutsatt att denna utlösare är kopplad till TIPO_QUARTO tabell, den tabellen har inte en kolumn med namnet TIPO_QUARTO ändra detta till :new.TIPO .

Nästa, PAC är av typen VARCHAR så det är oklart för mig vad du försöker göra i PAC := PAC - :new.TIPO; och i PAC := PAC + :new.TIPO; båda raderna kommer att visa invalid number undantag eftersom du inte kan lägga till eller subtrahera strängar, kanske din avsikt var att sammanfoga eller att få en understräng.

Och slutligen uppmaningen till UPDATE TIPO_QUARTO SET TIPO = PAC inuti en utlösare för TIPO_QUARTO kommer att resultera i mutating table undantag, du kan inte fråga/uppdatera en tabell som är mitt i en DML-sats (INSERT eller UPDATE i det här fallet) för att fixa detta, du kan bara tilldela :new.TIPO := PAC .

Ta hand om dessa detaljer så kanske ditt problem inte finns kvar.




  1. mysqldump:Fick felnummer 32 på att skriva

  2. MySQL-installation:FEL:Det gick inte att bygga ädelstensinbyggt tillägg

  3. Hur man pivoterar tabeller i MySQL

  4. MySQL - Få en räknare för varje dubblettvärde