两个触发器保存到一个触发器文件中
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
这将通过一个错误。
在一个 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
这将通过一个错误。