ORA-06502:PL / SQL:数值或值错误:Oracle sql查询中的字符串缓冲区太小

时间:2014-06-25 13:05:43

标签: sql oracle date difference

我想计算Oracle sql查询中两个日期之间的时差。我写了以下查询:

DECLARE
 v_time varchar2(40); 
 diff_hours varchar2(40); 
 BEGIN
 select substr(((select date_time from observation_measurement where observation_measurement_id=2861971)), 1,17)
 into v_time
 from dual;

 dbms_output.put_line(v_time);

 select 24 * (to_date('06-25-2014 09:46:36', 'MM-DD-YYYY hh24:mi:ss') 
             - to_date(v_time, 'YY-MM-DD hh24:mi:ss')) into diff_hours 
       from dual;
END;

第一个select语句返回正确的结果。当我试图计算从当前日期到先前计算日期的时间差时,它显示错误。我怎样才能得到正确的结果?

感谢!!!!

4 个答案:

答案 0 :(得分:1)

增加diff_hours变量工作的大小。谢谢克里希纳。 : - )

答案 1 :(得分:1)

使diff_hours成为NUMBER变量而不是VARCHAR2变量!

当然你可以让diff_hours足够长,以保存你的查询产生的所有无关紧要的小数,但无论如何声明VARCHAR2毫无意义!

答案 2 :(得分:0)

您好我在您的查询中做了一些更正。告诉我,如果有效

DECLARE
 v_time varchar2(40);
-- Increase the size  
 diff_hours varchar2(200); 
 BEGIN
 select substr(((select date_time from observation_measurement where observation_measurement_id=2861971)), 1,17)
 into v_time
 from dual;

 dbms_output.put_line(v_time);
-- using the same format mask for both the dates
 select 24 * (to_date('06-25-2014 09:46:36', 'MM-DD-YYYY hh24:mi:ss') 
             - to_date(v_time, 'MM-DD-YYYY hh24:mi:ss')) into diff_hours 
       from dual;
END;

答案 3 :(得分:0)

你可以增加diff_hours,它可能在某些情况下有用,但问题是它可能在其他情况下不起作用。

可以肯定的是,您需要将数字转换为字符串(例如,点后面有2位数字):

select trunc(24*...., 2) into diff_hours