2016-08-08 10 views
-3

自動時間システムを作成する必要があります。私はどの船積み1、船積みが多くのトラックを持っているかを知りたかった。各トラックは30分の積み荷にある。 E.G. :Oracle SQLデベロッパ

SHIPPING 1:3 TRUCKS

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

私はトラック1の時間を入力した場合、その後、トラック2が、その後30分に割り当てられますなど

は、することが可能ですこのための自動シーケンスを作る?シーケンサーを使用して

+2

へようこそSOの最初の時間です。ここであなたは[ask]について何かを見つけ、[mcve]を構築する方法はありません。 – Aleksej

答えて

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; 

短所:あなたがシーケンサーから引くと、その時間枠が失われます。これはつまり、たとえばテーブル3から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') 
+0

正確には、私はこの解決法の問題のセクションでも述べました。しかし、元のリクエストに注意してください**この**の自動シーケンスを作ることは可能ですか?私がこのようなことをしたいと思ったら、最初に(占有されていない)ギャップを見つけようとし、現在のsysdateよりも小さくはないが、それは要求されたものよりはるかに複雑である。リクエストは非常に曖昧です。 – peterpepo

+0

「自動シーケンス」が何であるか知っていますか?私は確かにしません。 –

0

代わりsequenceを持つのinsert声明でこのような何かをしようとします。 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')));