2016-04-29 2 views
0

Ich habe einen Trigger erstellt, der eine Prozedur aufruft, mit Oracle SQL Developer. Hier ist der Code für Trigger:Keine Daten mehr aus dem Socket (Oracle SQL Developer) zu lesen

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; 
/

Nun wird das Verfahren hier geschrieben:

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; 
/

Und wenn ich versuche Notentabelle zu ändern, indem diese:

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

ich Fehler angezeigt :

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

Es gibt eine Reihe von veröffentlichten Fehlern und einige Verweise auf unveröffentlichte Bugs auf MoS, daher müssen Sie möglicherweise einen SR aufstellen, um Hilfe von Oracle zu erhalten. Sie könnten PL/Scope deaktivieren, bevor Sie das Paket neu kompilieren und auslösen, aber nicht sicher, ob das hilft. Und einige der Fehler deuten darauf hin, dass sie zu Korruption führen können. Es lohnt sich, die Warnprotokoll- und Trace-Dateien zu überprüfen und die Auswirkungen zu bewerten. –

+0

Wenn Sie einen ora 600-Fehler erhalten, geben Sie immer einen SR ein. Die Chancen stehen gut, dass jemand anderes ein ähnliches Problem hatte und sie es entweder für Sie beheben oder einen Workaround schaffen können. Haben Sie auch die Sitzungsverfolgungsdatei eingecheckt? –

Antwort

0

Dies ist Ora-600 Sie sho Erkundigen Sie sich gründlich, warum in Ihrem Fall ausgelöst wird, vielleicht sollten Sie SR öffnen.

Außerdem verweisen Sie im Code auf die Tabelle "note", für die Sie einen Trigger erstellen, was zu einer mutierenden Tabelle führen könnte. Berücksichtigen Sie daher die Möglichkeit, die Codelogik zu ändern.

In meinem Verständnis brauchen Sie Anweisungsebene Trigger, nicht Zeilenebene Trigger?

0

ORACLE server session terminated by fatal error

die Sie interessieren, hatte das gleiche Problem auf dem gleichen „Thema“ sagen wir mal :) Und die Dinge Einstellung wie zuvor nur mein Problem gelöst gezeigt. Viel Glück!

+0

Ich hoffe, meine Antwort kam nicht zu spät, aber selbst wenn es zu spät ist, könntest du es vielleicht versuchen, ich bin neugierig, ob es funktionieren wird. Eine andere Person, die ich kenne, versuchte dies auf meinem eigenen SQL SCRIPT .... und löste das Problem immer noch nicht :))) – student0495

Verwandte Themen