Создать/заменить триггер в Squirrel

Я использую белку 3.2.0. Когда я пытаюсь заменить этот триггер:

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

Я получаю сообщение "Пожалуйста, введите значения параметров. Значение для ': new'"

Когда я нажимаю OK, появляется следующее сообщение:

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

В моем приложении я получаю сообщение об ошибке "ORA-04098: trigger 'CRW_INS_TRIG' is invalid and failed re-validation"

Это как-то связано с Белкой? Если да, то как я могу это решить?


person August    schedule 02.12.2010    source источник
comment
Проблема может быть в пустой строке между DECLARE и BEGIN. Возможно, Squirrel интерпретирует первые четыре строки как команду CREATE TRIGGER (что приводит к недопустимому триггеру), а затем пытается выполнить блок BEGIN-END как анонимный блок.   -  person Jeffrey Kemp    schedule 07.12.2010


Ответы (2)


Вы должны выгрузить плагин "sqlparam" в SQuirrel, после этого он не будет просить вас заполнять значения для переменных ":paramName"

person yatul    schedule 02.11.2011
comment
Да! Это работает, и триггер создается и действует в Oracle! - person August; 03.11.2011

Возможно, вы захотите добавить в свой триггер строку REFERENCING, чтобы она выглядела так:

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;

Попробуй это. Если это не сработает, попробуйте выполнить оператор с помощью другого инструмента (например, SQL*Plus, PL/SQL Developer, Toad и т. д.).

Делитесь и наслаждайтесь.

person Bob Jarvis - Reinstate Monica    schedule 02.12.2010
comment
это ничего не делает, если вы хотите сослаться на новое как на что-то, вам лучше переименовать его во что-то другое, чем новое, например n - person Alex; 25.06.2013