Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 复杂的触发器插入行取决于其他表中的值_Sql_Oracle_Triggers_Subquery - Fatal编程技术网

Sql 复杂的触发器插入行取决于其他表中的值

Sql 复杂的触发器插入行取决于其他表中的值,sql,oracle,triggers,subquery,Sql,Oracle,Triggers,Subquery,我有一个Oracle数据库和一个表Trains 每列火车都有一个JourneyID和一个出发日期作为外键参考旅程 旅行是火车每天定期进行的一次定期旅行,仅在一周内、仅在周末、特殊假期等。。。。旅行有出发日期和到达日期。它还包含周期开始和结束的日期,以及一个周期规则varchar,就像每个周末的每一天,一周中的每一天一样 我想创建一个触发器,根据时段规则,为时段内的每一天插入一列与正确旅程相关的新列车 我有几个问题: 我怎么能写这样的触发器?触发器将。。。每个语句触发一次,所以不会因为触发而有触发

我有一个Oracle数据库和一个表Trains

每列火车都有一个JourneyID和一个出发日期作为外键参考旅程

旅行是火车每天定期进行的一次定期旅行,仅在一周内、仅在周末、特殊假期等。。。。旅行有出发日期和到达日期。它还包含周期开始和结束的日期,以及一个周期规则varchar,就像每个周末的每一天,一周中的每一天一样

我想创建一个触发器,根据时段规则,为时段内的每一天插入一列与正确旅程相关的新列车

我有几个问题:

我怎么能写这样的触发器?触发器将。。。每个语句触发一次,所以不会因为触发而有触发的风险,对吗

如何测试旅程外键与期间主键匹配的期间属性

如何使用一组日期为两个日期之间的每一天执行一次任务?如何处理不在周末或仅在周末条件下的天数间隔

是否只能用SQL进行这样的操作??我假设是的,但是触发器中有很多子查询

以下是我在这段时间内每天的尝试:

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;。。。。