【发布时间】:2014-06-14 19:39:25
【问题描述】:
我有两张桌子。
第一个表是带有模式(Train_Number、Route_Status、Time_Status、Route_TM、Departure、Destination)的 Routes,第二个表是带有模式(Train_Number、Time_Status、Route_TM、Departure、Destination)的 Records。
我需要一个触发器,当 Route Status 从“En-Route”变为“Arrived”时,它将(Train_Number、Time_Status、Date、Departure、Destination)从 Routes 记录到 Records。
还有另一个表配置与模式(名称,值)。特别是,在那个表中,我有 ('Enable_Logging', 'T')
这是我对这个触发器的尝试:
CREATE OR REPLACE TRIGGER Train_Logging
AFTER UPDATE OF Route_Status ON Routes
FOR EACH ROW
WHEN (new.route_status = 'Arrived' AND old.route_status = 'En-Route')
DECLARE
logging_flag Configuration.value%type;
BEGIN
SELECT Configuration.value INTO logging_flag FROM Configuration WHERE Configuration = 'Enable_Logging';
IF (logging_flag = 'T') THEN INSERT INTO Records (Train_Number, Time_Status, Date, Departure, Destination) VALUES (SELECT Train_Number, Time_Status, Date, Departure, Destination FROM Routes);
END IF;
END Train_Logging;
我的错误是 “忽略 PL/SQL 语句”(在 logging_flag Configuration.value%type; 处) 和“ORA-00936 缺少表达式”(在 BEGIN)
我的声明有什么问题?
【问题讨论】:
-
您描述的表定义有一个名为
date的列,它是一个保留字,因此除非您创建引用它,否则它不会被称为;并且您没有一个名为status的列,正如您的触发器所期望的那样。显示您的实际表 DDL 可以更轻松地查看真正的问题。 -
对不起,我重命名了所有内容,所以我不必发布很多不必要的脱离上下文的东西