2016-03-28 5 views
0

私は次のようにPL/SQLのタイムスタンプ変数に30分を追加しようとしています:PL/SQLで変数をタイムスタンプに追加するにはどうすればよいですか?

DECLARE 
    l_start_timestamp timestamp; 
    l_end_timestamp timestamp; 
    rnk number; 
    BEGIN 
      l_start_timestamp := to_timestamp('&start_time', 'dd-mm-yyyy hh24:mi:ss') + INTERVAL '00:30' HOUR TO MINUTE; 
      l_end_timestamp := to_timestamp('&end_time', 'dd-mm-yyyy hh24:mi:ss') + INTERVAL '00:30' HOUR TO MINUTE; 
    ......................... 
    .......................... 
    END; 
    /

がエラーを下回る行き方:親切

Enter value for start_time: 25-03-2016 00:00:00 
old 23:  l_start_timestamp := to_timestamp('&start_time', 'dd-mm-yyyy hh24:mi:ss') + INTERVAL '00:30' HOUR TO MINUTE; 
new 23:  l_start_timestamp := to_timestamp('25-03-2016 00:00:00', 'dd-mm-yyyy hh24:mi:ss') + INTERVAL '00:30' HOUR TO MINUTE; 
Enter value for end_time: 26-03-2016 00:00:00 
old 24:  l_end_timestamp := to_timestamp('&end_time', 'dd-mm-yyyy hh24:mi:ss') + INTERVAL '00:30' HOUR TO MINUTE; 
new 24:  l_end_timestamp := to_timestamp('26-03-2016 00:00:00', 'dd-mm-yyyy hh24:mi:ss') + INTERVAL '00:30' HOUR TO MINUTE; 
     l_start_timestamp := to_timestamp('25-03-2016 00:00:00', 'dd-mm-yyyy hh24:mi:ss') + INTERVAL '00:30' HOUR TO MINUTE; 
                          * 
ERROR at line 23: 
ORA-06550: line 23, column 86: 
PLS-00166: bad format for date, time, timestamp or interval literal 

、これを行う方法を私を助けます。

ありがとうございました。

答えて

3

時間を分に変換するのではなく、分を追加するだけです。

DECLARE 
    l_start_timestamp timestamp; 
    l_end_timestamp timestamp; 
    rnk number; 
BEGIN 
    l_start_timestamp := to_timestamp('&start_time', 'dd-mm-yyyy hh24:mi:ss') + INTERVAL '30' MINUTE; 
    l_end_timestamp := to_timestamp('&end_time', 'dd-mm-yyyy hh24:mi:ss') + INTERVAL '30' MINUTE; 
END; 
+0

恐ろしいを。ありがとうございました!! – CodeDevotion

0

少なくとも11gR2のOracleバグを実行したと思います。

間隔文が完全に有効です:

SQL> select date'2016-03-29' + interval '01:30' hour to minute from dual; 

DATE'2016-03-29'+IN 
------------------- 
2016-03-29 01:30:00 

それはそれが必要PL/SQLコンテキストイベントでは動作しません。しかし:

declare 
    v_date date := date'2016-03-29' + interval '01:30' hour to minute; 
begin 
    dbms_output.put_line(v_date); 
end; 
/

ERROR at line 2: 
ORA-06550: line 2, column 37: 
PLS-00166: bad format for date, time, timestamp or interval literal 

回避策:

declare 
    v_date date := date'2016-03-29' + interval '1' hour + interval '30' minute; 
begin 
    dbms_output.put_line(v_date); 
end; 
/

2016-03-29 01:30:00 

declare 
    v_date date; 
begin 
    select date'2016-03-29' + interval '01:30' hour to minute 
    into v_date 
    from dual; 

    dbms_output.put_line(v_date); 
end; 
/

2016-03-29 01:30:00