2016-04-29 28 views
0

oracle sql developerを使用して、1つのプロシージャをコールするトリガーを1つ作成しました。ここでは、トリガーのコードは次のとおりです。ソケットから読み取るデータがもうありません(Oracle SQL Developer)

CREATE OR REPLACE TRIGGER noteTrigger 
    BEFORE 
    INSERT OR 
    UPDATE OF valoare OR 
    DELETE 
    ON note 
BEGIN 
    CASE 
    WHEN INSERTING THEN 
     DBMS_OUTPUT.PUT_LINE('Inserting'); 
     updateBursa(); 
    WHEN UPDATING('valoare') THEN 
     DBMS_OUTPUT.PUT_LINE('Updating valoare'); 
     updateBursa(); 
    WHEN DELETING THEN 
     DBMS_OUTPUT.PUT_LINE('Deleting'); 
     updateBursa(); 
    END CASE; 
END; 
/

は今、手順はここに書かれている:

CREATE OR REPLACE PROCEDURE updateBursa IS 
v_countBursieri NUMBER := 0; 
BEGIN 
    UPDATE STUDENTI SET bursa = null; 
    FOR v_i IN (SELECT nr_matricol from studenti natural join note group by nr_matricol having avg(valoare) = 
      (select max(avg(valoare)) from studenti natural join note group by nr_matricol)) LOOP 
      v_countBursieri := v_countBursieri + 1; 
    END LOOP; 
    FOR v_i IN (SELECT nr_matricol from studenti natural join note group by nr_matricol having avg(valoare) = 
      (select max(avg(valoare)) from studenti natural join note group by nr_matricol)) LOOP 

      UPDATE STUDENTI SET bursa = 1000/v_countBursieri where nr_matricol = v_i.nr_matricol; 
    END LOOP; 

END; 
/

そして、私は、このことにより、ノートテーブルを変更しようとすると:

INSERT INTO note VALUES ('111', '25', 5, TO_DATE('20/06/2015', 'dd/mm/yyyy')); 

私はエラーを取得します:

Error report - 
ORA-00603: ORACLE server session terminated by fatal error 
ORA-00600: internal error code, arguments: [kqlidchg0], [], [], [], [], [], [], [], [], [], [], [] 
ORA-00604: error occurred at recursive SQL level 1 
ORA-00001: unique constraint (SYS.I_PLSCOPE_SIG_IDENTIFIER$) violated 
00603. 00000 - "ORACLE server session terminated by fatal error" 
*Cause: An Oracle server session was in an unrecoverable state. 
*Action: Log in to Oracle again so a new server session will be created 
      automatically. Examine the session trace file for more 
      information. 

Error report - 
SQL Error: No more data to read from socket 
+0

は公表されたバグの数とMOS上の未公表のバグにいくつかの参照がありますので、あなたは、Oracleから指導を得るためにSRを調達する必要があるかもしれません。パッケージとトリガを再コンパイルする前にPL/Scopeを無効にしてみることもできますが、それが役立つかどうかはわかりません。そしてバグの中には、彼らが腐敗につながる可能性があることが示唆されています。警告ログとトレースファイルを確認し、影響を評価することは価値があります。 –

+0

ora 600エラーが発生した場合は、必ずSRを入力してください。チャンスは良いです他の誰かが同様の問題を抱えていて、あなたのためにそれを修正するか、回避策を考え出すことができます。また、セッショントレースファイルをチェックインしましたか? –

答えて

0

これはオラ600ですあなたの事件でなぜ育てられたのかを深く掘り下げてみてください。おそらくSRを開くべきでしょう。

また、コード内であなたは、テーブルを変異につながる可能性がありますが、トリガーを作成されているテーブル「ノート」を、参照するので、あなたのコードのロジックを変更するオプションを検討しています。

私の理解では、文レベルのトリガ、行レベルのトリガが必要ですか?

0

ORACLE server session terminated by fatal error

同じ「トピック」のは、言わせて上で同じ問題を抱えていた:)そして、前述のように物事を設定するだけで私の問題を解決しました。これを試してみてくださいがんばろう!

+0

私の答えが遅すぎることはないと思うが、遅くてもそれを試しても、それがうまくいくかどうか不思議だ。私が知っている別の人は、自分自身のSQLスクリプトでこれを試しました....そしてまだ問題は解決していません:))) – student0495

関連する問題