2010-12-02 8 views
11

Ich benutze Eichhörnchen 3.2.0 Wenn ich versuche, diesen Auslöser zu ersetzen:erstellen/ersetzen Trigger in Eichhörnchen

CREATE OR REPLACE TRIGGER crw_ins_trig 
    BEFORE INSERT OR UPDATE ON crew 
    FOR EACH ROW 
DECLARE 

BEGIN 
    if (:new.crw_id is null) then 
     select crw_id_seq.nextval 
     into :new.crw_id 
     from dual; 
    end if; 
END; 
/

ich die Meldung „Bitte geben Sie den Parameterwert Wert für.‚Neue‘“

Wenn ich die Ergebnismeldung auf OK klicken ist:

Warning: Warning: execution completed with warning 
SQLState: null 
ErrorCode: 17110 
Position: 27 

Query 1 of 1, Rows read: 0, Elapsed time (seconds) - Total: 0.023, SQL query: 0.023, Building output: 0 

In meiner Anwendung bekomme ich einen Fehler "ORA-04098: trigger 'CRW_INS_TRIG' is invalid and failed re-validation"

Hat das mit Eichhörnchen zu tun? Wenn ja, wie kann ich das lösen?

+0

Das Problem könnte die Leerzeile zwischen dem DECLARE und BEGIN. Vielleicht interpretiert Squirrel die ersten vier Zeilen als CREATE TRIGGER-Befehl (was zu einem ungültigen Trigger führt) und versucht dann, den BEGIN-END-Block als anonymen Block auszuführen. –

Antwort

15

Sie sollten „sqlparam“ Plugin in SQuirrel entladen, danach ist es nicht, dass Sie fragen Werte füllen für „: paramName“ Variablen

+0

Ja! Es funktioniert und der Trigger ist in Oracle erstellt und gültig! – Guus

0

Vielleicht möchten Sie eine REFERENCING Zeile in Trigger hinzuzufügen, so dass es wie

CREATE OR REPLACE TRIGGER crw_ins_trig 
    BEFORE INSERT OR UPDATE ON crew 
    REFERENCING NEW AS NEW 
       OLD AS OLD 
    FOR EACH ROW 
BEGIN 
    if (:new.crw_id is null) then 
     select crw_id_seq.nextval 
     into :new.crw_id 
     from dual; 
    end if;  
END crw_ins_trig; 

bereiten aussehen würde. Wenn dies nicht funktioniert, versuchen Sie, die Anweisung mit einem anderen Tool auszuführen (z. B. SQL * Plus, PL/SQL Developer, Toad usw.).

Teilen und genießen.

+0

das tut nichts, wenn Sie als etwas neu beziehen möchten, benennen Sie es besser in etwas anderes als neu, wie n – Alex