2016-03-28 5 views
0

Ich versuche, 30 Minuten zu einer Zeitstempel-Variable in PL/SQL wie folgt hinzuzufügen: unten FehlerWie Minuten zu Zeitstempel Variable in PL/SQL hinzufügen?

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; 
    /

Anfahrt:

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 

Bitte, helfen Sie mir, wie dies zu tun.

Vielen Dank im Voraus.!

Antwort

3

Versuchen Sie, nur Minuten hinzuzufügen, anstatt Stunden in Minuten zu konvertieren.

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

Ehrfürchtig .Vielen Dank!! – CodeDevotion

0

Ich glaube, Sie sind in einen Oracle-Fehler geraten (zumindest in 11gR2).

Das Intervall Aussage ist vollkommen gültig:

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 

aber es in PL/SQL-Kontext-Ereignis nicht funktioniert es sollte:

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 

Mögliche Lösungen:

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 
Verwandte Themen