我的一个脚本中有这个触发器:
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;
/
我使用TOAD来执行脚本。 当我使用' Execute as Script'按钮它工作正常。 但是当我在SQLPlus窗口中运行它时,我得到了这一行:
SP2-0552: Bind variable "NEW" not declared
为什么我得到这个? 感谢
答案 0 :(得分:3)
默认情况下,SQL * Plus将空行视为语句的结尾。第一行create
永远不会被执行。其余的作为匿名块执行,因为它不再是触发器语句的一部分,所以NEW
无法识别。
您可以在begin
之前删除空白行,也可以在开始之前执行set sqlblanklines on
。