Ok, jeg sender dette som et svar, fordi kommentarer ikke tillader så meget tekst.
Når du ser dine borde, er nogle ting stadig ikke klare. din funktion ADD_PACIENTE_QUARTO
implementerer en SELECT
sætning som angiver prædikatet Where PAC = CONT
men PAC
er ikke i PACIENTE
s specifikation, men er snarere den lokale variabel, hvor du gemmer dit resultat og CONT
er din parameter, er det ikke klart, hvad du prøvede der.
Nu har din trigger nogle fejl i logik og implementering.
Først og fremmest er din triggers navn PACIENTE_TRIGGER
men linjen INSERT OR UPDATE ON TIPO_QUARTO
fortæller mig, at den er på TIPO_QUARTO
tabel, er dette ikke et problem syntaktisk, men logisk set kan det være en smerte i numsen for en person, der forsøger at finde ud af, hvilket bord triggeren tilhører.
Brug derefter INSERT OR UPDATE OF TIPO ON TIPO_QUARTO
kun for at overvåge Indsæt eller opdatere ændringer i kolonne TIPO
af TIPO_QUARTO
tabel.
Nu denne linje If :new.TIPO_QUARTO = 'UTI' then
, forudsat at denne trigger er knyttet til TIPO_QUARTO
tabel, har den tabel ikke en kolonne med navnet TIPO_QUARTO
ændre dette til :new.TIPO
.
Dernæst PAC
er af typen VARCHAR
så det er uklart for mig, hvad du prøver at gøre i PAC := PAC - :new.TIPO;
og i PAC := PAC + :new.TIPO;
begge linjer vil kaste invalid number
undtagelse, da du ikke kan tilføje eller trække strenge fra, måske var din hensigt at sammenkæde eller få en understreng.
Og til sidst opfordringen til UPDATE TIPO_QUARTO SET TIPO = PAC
inde i en trigger for TIPO_QUARTO
vil resultere i mutating table
undtagelse, du kan ikke forespørge/opdatere en tabel, der er midt i en DML-sætning (INSERT eller UPDATE i dette tilfælde) for at rette dette, du kan bare tildele :new.TIPO := PAC
.
Pas på disse detaljer, og måske vil dit problem ikke være længere.