sql >> データベース >  >> RDS >> Oracle

無効なトリガー エラー

    コメントではこれほど多くのテキストが許可されないため、これを回答として投稿します。

    あなたのテーブルを見ると、まだはっきりしていないことがあります。関数 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 を使用します 挿入の監視または変更の更新のみTIPOTIPO_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 を割り当てるだけです。 .

    この詳細に気をつければ、おそらく問題は解決します。




    1. 最近挿入されたレコードIDの配列を取得するにはどうすればよいですか?

    2. MySql:データベースに複数の選択肢のデータを保存する

    3. Oracle-WITH CLAUSE => MERGE? (構文エラー、 )

    4. 文字列を日付phpに変換します