コメントではこれほど多くのテキストが許可されないため、これを回答として投稿します。
あなたのテーブルを見ると、まだはっきりしていないことがあります。関数 ADD_PACIENTE_QUARTO SELECT を実装します 述語 Where PAC = CONT を記述するステートメント しかし PAC PACIENTE にありません の仕様ではなく、結果と CONT を格納するローカル変数です はあなたのパラメーターです。そこで何を試したかは明確ではありません。
トリガーのロジックと実装にいくつかの欠陥があります。
まず、トリガーの名前は PACIENTE_TRIGGER です しかし、行 INSERT OR UPDATE ON TIPO_QUARTO TIPO_QUARTOにあると教えてくれました これは構文的には問題ではありませんが、トリガーがどのテーブルに属しているかを理解しようとしている人にとっては、論理的には厄介な問題になる可能性があります.
次に、INSERT OR UPDATE OF TIPO ON TIPO_QUARTO を使用します 挿入の監視または変更の更新のみ 列 TIPO に TIPO_QUARTO の
この行 If :new.TIPO_QUARTO = 'UTI' then 、このトリガーが TIPO_QUARTO にアタッチされていると仮定します テーブル、そのテーブルには TIPO_QUARTO という名前の列がありません これを :new.TIPO に変更します .
次に、PAC タイプは VARCHAR です PAC := PAC - :new.TIPO; で何をしようとしているのか、私にはわかりません。 PAC := PAC + :new.TIPO; で 両方の行で invalid number がスローされます 文字列を加算または減算することはできないため、例外として、連結または部分文字列の取得が意図されている可能性があります。
最後に UPDATE TIPO_QUARTO SET TIPO = PAC の呼び出し TIPO_QUARTO のトリガー内 mutating table になります 例外として、DML ステートメント (この場合は INSERT または UPDATE) の途中にあるテーブルをクエリ/更新することはできません。これを修正するには、 :new.TIPO := PAC を割り当てるだけです。 .
この詳細に気をつければ、おそらく問題は解決します。