Oracle SQL开发人员

时间:2016-08-08 09:00:47

标签: sql oracle plsql sequence

我需要制作一个自动时间系统。我想知道哪个SHIPPING1,SHIPPING有很多卡车,每辆卡车将在装卸码头停留30分钟, 例如。 :

  

运送1:3卡车

truck    Time
-----    ----- 
truck1   11.00,
truck2   11.30.
truck3   12.00

如果我输入卡车1的时间,那么卡车2将分配到30分钟之后,等等。

是否可以为此制作自动序列?

2 个答案:

答案 0 :(得分:0)

使用音序器的解决方案:

CREATE SEQUENCE TRUCK_SEQUENCE MINVALUE 0 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 0 CACHE 20 NOORDER NOCYCLE;

SELECT 'NEXT_CAR',
TO_CHAR(TO_DATE('08.08.2016 10:00', 'dd.mm.yyyy hh24:mi:ss')+1/24/60*30*TRUCK_SEQUENCE.NEXTVAL, 'dd.mm.yyyy hh24:mi:ss')
 FROM DUAL;

缺点:一旦从音序器中拉出,该时间帧就会丢失。这意味着,如果你决定,你不能在11:00加载汽车3(从表中删除),但你想要加载汽车4(另一个插入),你得到11:30。它是音序器的实际特征。

使用表格中的最长时间解决方案:

WITH LOAD_TIMES AS
  (SELECT 'TRUCK1'                                       AS CAR,
    TO_DATE('08.08.2016 10:00', 'dd.mm.yyyy hh24:mi:ss') AS TIME
     FROM DUAL
  )
 SELECT 'TRUCK2',
  TO_CHAR(MAX(TIME)+1/24/60*30, 'dd.mm.yyyy hh24:mi:ss')
   FROM LOAD_TIMES;

缺点:您每次查询整个表以查找最长使用时间然后递增它。

所有解决方案的共同点:

--This is basic offset (date to start with)
TO_DATE('08.08.2016 10:00', 'dd.mm.yyyy hh24:mi:ss')

答案 1 :(得分:0)

你可以在insert语句中尝试这样的事情,而不是sequence

考虑TO_DATE('08.08.2016 10:00', 'dd.mm.yyyy hh24:mi:ss')shipping1

的初始时间
INSERT INTO table1
(shipping_number, truck_number, truck_time) 
VALUES ('shipping1', 'truck3', 
(SELECT count(truck_number) 
FROM table1
group by shipping
WHERE shipping_number='shipping1')*30/(24*60)+TO_DATE('08.08.2016 10:00', 'dd.mm.yyyy hh24:mi:ss')));