Oracle 在Squirrel中创建/替换触发器

Oracle 在Squirrel中创建/替换触发器,oracle,squirrel-sql,Oracle,Squirrel Sql,我使用squirrel3.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; e

我使用squirrel3.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”的值

单击“确定”时,结果消息为:

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:触发器“CRW\U INS\U TRIG”无效且重新验证失败”


这和松鼠有关吗?如果是这样,我如何解决这个问题?

您可能希望在触发器中添加一条参考线,使其看起来像

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等)执行该语句


p> >你应该卸载松鼠中的“SqLPARAM”插件,之后它不会要求你填写“:PARAMEMENT”变量

值。问题可能是声明和开始之间的空行。也许Squirrel将前四行解释为CREATE TRIGGER命令(导致无效触发器),然后尝试将BEGIN-END块作为匿名块执行。是的!它可以工作,触发器在Oracle中创建并有效!这没有任何作用,如果您想引用new作为某物,最好将其重命名为其他名称,而不是new,比如n