Plsql 如何在PL/SQL中向timestamp变量添加分钟数?

Plsql 如何在PL/SQL中向timestamp变量添加分钟数?,plsql,timestamp,Plsql,Timestamp,我正在尝试向PL/SQL中的时间戳变量添加30分钟,如下所示: 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 MI

我正在尝试向PL/SQL中的时间戳变量添加30分钟,如下所示:

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
请帮我怎么做


提前谢谢

尝试添加分钟,而不是将小时转换为分钟

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;

尝试只添加分钟,而不是将小时转换为分钟

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;

我认为您遇到了Oracle错误(至少在11gR2中)

interval语句完全有效:

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

我认为您遇到了Oracle错误(至少在11gR2中)

interval语句完全有效:

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