2016-03-28 20 views
0

我試圖增加30分鐘在PL/SQL時間戳變量如下:如何在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

我想你已經遇到了一個Oracle錯誤(至少在11gR2中)。

間隔聲明是完全合法:

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 
相關問題