2010-12-02 10 views
11

J'utilise écureuil 3.2.0 Lorsque je tente de remplacer ce déclencheur:Créer/remplacer déclencheur dans écureuil

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

Je reçois le message « Veuillez saisir les valeurs des paramètres Valeur. « : New » »

Lorsque je clique sur OK le message de résultat est:

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 

Dans ma demande je reçois une erreur "ORA-04098: trigger 'CRW_INS_TRIG' is invalid and failed re-validation"

Est-ce que cela a à voir avec Squirrel? Si oui, comment puis-je résoudre cela?

+0

Le problème pourrait être la ligne blanche entre le DECLARE et BEGIN. Peut-être que Squirrel interprète les quatre premières lignes comme la commande CREATE TRIGGER (entraînant un trigger invalide), puis essaye d'exécuter le bloc BEGIN-END comme un bloc anonyme. –

Répondre

15

Vous devez décharger plugin « SqlParam » dans Écureuil, après qu'il ne vous demandera de remplir des valeurs pour « : paramName » variables

+0

Oui! Cela fonctionne et le déclencheur est créé et valide dans Oracle! – Guus

0

Vous pouvez ajouter une ligne REFERENCING à votre déclencheur afin qu'il ressemblerait

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; 

essayer. Si cela ne fonctionne pas, essayez d'exécuter l'instruction en utilisant un outil différent (par exemple SQL * Plus, PL/SQL Developer, Toad, etc.).

Partagez et appréciez.

+0

qui ne fait rien, si vous voulez faire référence à quelque chose de nouveau, vous feriez mieux de le renommer en quelque chose d'autre puis nouveau, comme n – Alex