Oracle “未知”;SP2-0552:绑定变量“;新";“未申报”;触发器上的消息

Oracle “未知”;SP2-0552:绑定变量“;新";“未申报”;触发器上的消息,oracle,plsql,triggers,toad,Oracle,Plsql,Triggers,Toad,我的一个脚本中有此触发器: CREATE OR REPLACE TRIGGER MS_DB.DB_TR_IncrementTrialNumber BEFORE INSERT ON MS_DB.DB_SUMMARY FOR EACH ROW begin UPDATE MS_DB.DB_Summary SET MS_DB.DB_Summary.TimesGenerated = (Select COALESCE(MAX(TimesGenerated),0)+1

我的一个脚本中有此触发器:

    CREATE OR REPLACE TRIGGER MS_DB.DB_TR_IncrementTrialNumber BEFORE INSERT 
ON MS_DB.DB_SUMMARY FOR EACH ROW

begin
    UPDATE MS_DB.DB_Summary SET MS_DB.DB_Summary.TimesGenerated =
        (Select COALESCE(MAX(TimesGenerated),0)+1 
         From MS_DB.DB_Summary
         Where MS_DB.DB_Summary.StepID = :NEW.StepID And 
         MS_DB.DB_Summary.ValidationID = :NEW.ValidationID AND  
         MS_DB.DB_Summary.SummaryDate = :NEW.SummaryDate);
    where MS_DB.DB_Summary.ID = :NEW.ID;
end;
/
我用蟾蜍来执行脚本。 当我使用“按脚本执行”按钮时,效果很好。 但当我在SQLPlus窗口中运行它时,我得到以下行:

SP2-0552: Bind variable "NEW" not declared
你知道我为什么会得到这个吗?
谢谢

默认情况下,SQL*Plus将空行视为语句的结尾。第一行,
create
,永远不会执行。其余部分作为匿名块执行,由于它不再是触发器语句的一部分,
NEW
无法识别


您可以在<代码>开始>代码>之前删除空行,或者在开始之前执行。

默认的SQL*Plus将空白行作为语句的结尾。第一行,
create
,永远不会执行。其余部分作为匿名块执行,由于它不再是触发器语句的一部分,
NEW
无法识别


您可以在“代码> >开始/代码>之前删除空白行,或者在您开始之前删除。

<代码>:新< /COD>是占位符。您只需要
NEW
(no
),它引用新行——这正是错误告诉您的“bind variable NEW not declared”。它是否模拟默认的SQL*加空行行为?换句话说,它是否将块看作与代码> >创建< /代码> -如果在代码< >开始/代码>之前删除空白行,它是否起作用?这是你的答案Alex Poole。谢谢什么是“SQLPlus窗口”?这是一个蟾蜍的东西还是你的意思是真正的Oracle SQLPlus?我可以在SQLPlus中创建带有空行的触发器,而无需
设置sqlblanklines
:NEW
是一个占位符。您只需要
NEW
(no
),它引用新行——这正是错误告诉您的“bind variable NEW not declared”。它是否模拟默认的SQL*加空行行为?换句话说,它是否将块看作与代码> >创建< /代码> -如果在代码< >开始/代码>之前删除空白行,它是否起作用?这是你的答案Alex Poole。谢谢什么是“SQLPlus窗口”?这是一个蟾蜍的东西还是你的意思是真正的Oracle SQLPlus?我可以在SQLPlus中创建带有空行的触发器,而无需
设置sqlblanklines
。前面的分号需要删除。是的,没有看到触发器实际上在做什么,但你是对的。你不打算用你编码的方式得到一个变异表错误吗?您正在查询和更新(!)触发器所针对的同一个表。事实上,还有另一个错误。前面的分号需要删除。是的,没有看到触发器实际上在做什么,但你是对的。你不打算用你编码的方式得到一个变异表错误吗?您正在查询和更新(!)触发器所针对的同一个表。