Sql 复杂的触发器插入行取决于其他表中的值
我有一个Oracle数据库和一个表Trains 每列火车都有一个JourneyID和一个出发日期作为外键参考旅程 旅行是火车每天定期进行的一次定期旅行,仅在一周内、仅在周末、特殊假期等。。。。旅行有出发日期和到达日期。它还包含周期开始和结束的日期,以及一个周期规则varchar,就像每个周末的每一天,一周中的每一天一样 我想创建一个触发器,根据时段规则,为时段内的每一天插入一列与正确旅程相关的新列车 我有几个问题: 我怎么能写这样的触发器?触发器将。。。每个语句触发一次,所以不会因为触发而有触发的风险,对吗 如何测试旅程外键与期间主键匹配的期间属性 如何使用一组日期为两个日期之间的每一天执行一次任务?如何处理不在周末或仅在周末条件下的天数间隔 是否只能用SQL进行这样的操作??我假设是的,但是触发器中有很多子查询 以下是我在这段时间内每天的尝试:Sql 复杂的触发器插入行取决于其他表中的值,sql,oracle,triggers,subquery,Sql,Oracle,Triggers,Subquery,我有一个Oracle数据库和一个表Trains 每列火车都有一个JourneyID和一个出发日期作为外键参考旅程 旅行是火车每天定期进行的一次定期旅行,仅在一周内、仅在周末、特殊假期等。。。。旅行有出发日期和到达日期。它还包含周期开始和结束的日期,以及一个周期规则varchar,就像每个周末的每一天,一周中的每一天一样 我想创建一个触发器,根据时段规则,为时段内的每一天插入一列与正确旅程相关的新列车 我有几个问题: 我怎么能写这样的触发器?触发器将。。。每个语句触发一次,所以不会因为触发而有触发
CREATE TRIGGER Auto_Creation_Trains
BEFORE INSERT OR UPDATE ON Trajets
FOR EACH ROW
BEGIN
IF type = "Regulier - Taille Normale"
THEN
CREATE SEQUENCE temp MINVALUE 1 START WITH 1 INCREMENT BY 1 MAX VALUE 366
WHILE (temp != fin_periode - debut_periode)
LOOP
temp.nextval
INSERT INTO (trainID,Sits1,Available1,Sits1,Available2,journeyID, depart) TrainInfo(IDTrain.next, 150,150,647,647,:NEW.journeyID);
END LOOP;
DROP SEQUENCE temp
END IF;
END;
这似乎合法吗?我认为这个想法应该行得通,当这个表得到一条新记录时,将许多记录插入到另一个表中。但是你放在这里的代码是有争议的 我觉得在这里没有必要使用序列,只需要一个for循环就可以了。 应该是: 在traininfo中插入trainID,Sits1,Available1,Sits1,Available2,journeyID,出发值IDTrain.next,150150647647,:NEW.journeyID 除非这只是一个草稿,并且您真正的insert语句是不同的,否则我不理解为什么您需要在traininfo表中插入365条相同的记录
你说得对,这个序列没有用,我不知道我可以做更简单的事情。它不是同一条记录,假设它的最后一个属性每次都会更改。这是我的一个错误,我忘了插入最后一个属性。最后一个属性是应该在每次迭代中递增的日期。如果a执行日期+1,结果将是第二天?是的,它将是这样的:对于1..365循环中的i,下一个\u DATE=truncsysdate+i;。。。。