两个触发器保存到一个触发器文件中

Two Triggers saving into one trigger file

在一个 sql 文件中编写的原始触发器:

CREATE OR REPLACE TRIGGER "LOCATION_TRIGGER"
BEFORE INSERT ON BBT_LOCATIONS
FOR EACH ROW

BEGIN
  IF :new.LOCATIONID < 1000 
  THEN :new.LOCATIONID := :new.LOCATIONID;
  ELSE
  :new.LOCATIONID := LOCATIONID_SEQ.NEXTVAL;
  END IF;
END LOCATION_TRIGGER;

---------------------------------------

CREATE OR REPLACE TRIGGER "ROUTESTOP_TRIGGER"
BEFORE INSERT ON BBT_ROUTESTOP
FOR EACH ROW    

DECLARE
  matches varchar2(4);

BEGIN
  SELECT COUNT(*) INTO matches FROM BBT_LOCATIONS WHERE LOCATIONID = :new.STOP_REFERENCE;
  IF (match <> 1)
  THEN
   SELECT LOCATIONID into :new.STOP_REFERENCE
   FROM BBT_LOCATIONS
   WHERE NAME = :new.NAME;
  END IF;

END ROUTESTOP_TRIGGER;

当这是 运行 时,两个触发器的所有代码都进入 LOCATION_TRIGGER 并且进入 ROUTESTOP_TRIGGER 的所有代码都是

create or replace 

第一次写触发器。感觉我的语法一定是错误的,但我看不到它。提前致谢。

您可以尝试在每次触发后在新行中添加正斜杠以执行缓冲区中的命令:

CREATE OR REPLACE TRIGGER "LOCATION_TRIGGER"
.......
END LOCATION_TRIGGER;
/

这不应该,

 IF (matches <> 1) instead of  IF (match <> 1) in the code?

声明的变量是

matches varchar2(4); but you are using match inside

这将通过一个错误。