Ok, ich werde dies als Antwort posten, da Kommentare nicht so viel Text zulassen.
Wenn ich Ihre Tabellen sehe, sind einige Dinge immer noch nicht klar. Ihre Funktion ADD_PACIENTE_QUARTO
implementiert ein SELECT
Anweisung, die das Prädikat Where PAC = CONT
angibt aber PAC
ist nicht in PACIENTE
's Spezifikation, sondern ist die lokale Variable, in der Sie Ihr Ergebnis und CONT
speichern ist Ihr Parameter, es ist nicht klar, was Sie dort versucht haben.
Jetzt hat Ihr Trigger einige Fehler in Logik und Implementierung.
Zunächst einmal lautet der Name Ihres Auslösers PACIENTE_TRIGGER
sondern die Zeile INSERT OR UPDATE ON TIPO_QUARTO
sagt mir, dass es auf dem TIPO_QUARTO
ist Tabelle, dies ist syntaktisch kein Problem, kann aber logischerweise ein Ärgernis für jemanden sein, der herauszufinden versucht, zu welcher Tabelle der Trigger gehört.
Verwenden Sie als Nächstes INSERT OR UPDATE OF TIPO ON TIPO_QUARTO
um Einfügungen zu überwachen oder Änderungen nur zu aktualisieren in der Spalte TIPO
von TIPO_QUARTO
Tabelle.
Nun diese Zeile If :new.TIPO_QUARTO = 'UTI' then
, vorausgesetzt, dieser Trigger ist an TIPO_QUARTO
angehängt Tabelle, diese Tabelle hat keine Spalte namens TIPO_QUARTO
ändern Sie dies in :new.TIPO
.
Als nächstes PAC
ist vom Typ VARCHAR
daher ist mir unklar, was Sie in PAC := PAC - :new.TIPO;
zu tun versuchen und in PAC := PAC + :new.TIPO;
beide Zeilen geben invalid number
aus Ausnahme, da Sie keine Zeichenfolgen hinzufügen oder subtrahieren können, vielleicht war Ihre Absicht, eine Teilzeichenfolge zu verketten oder zu erhalten.
Und zuletzt der Aufruf von UPDATE TIPO_QUARTO SET TIPO = PAC
innerhalb eines Triggers für TIPO_QUARTO
führt zu mutating table
Ausnahme:Sie können keine Tabelle abfragen/aktualisieren, die sich mitten in einer DML-Anweisung befindet (INSERT oder UPDATE in diesem Fall). Um dies zu beheben, können Sie einfach :new.TIPO := PAC
zuweisen .
Kümmern Sie sich um diese Details und vielleicht ist Ihr Problem dann nicht mehr da.