我需要制作一个自动时间系统。我想知道哪个SHIPPING1,SHIPPING有很多卡车,每辆卡车将在装卸码头停留30分钟, 例如。 :
运送1:3卡车
truck Time
----- -----
truck1 11.00,
truck2 11.30.
truck3 12.00
如果我输入卡车1的时间,那么卡车2将分配到30分钟之后,等等。
是否可以为此制作自动序列?
答案 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')));