日期格式图片在转换整个输入字符串错误之前结束

时间:2014-07-25 08:03:12

标签: sql oracle date timestamp procedure

我有这个程序:

create or replace Procedure return_rows_LECTURE_BY_DATE (in_date in date, out_cursor OUT SYS_REFCURSOR) As

Begin
     OPEN out_cursor for
     select *
     FROM COURSE_LECTURE
     WHERE LECT_DATE_TIME_START >= to_timestamp(in_date, 'dd-mm-yyyy')
     and       LECT_DATE_TIME_START < to_timestamp(in_date+1, 'dd-mm-yyyy')
    ORDER BY LECT_DATE_TIME_START;
End;

输入:日期,输出:此日期的讲座。 表(视图)中的日期是TIMESTAMP。

我想运行此程序。我试过这个:

declare 
k SYS_REFCURSOR;
--t DATE:= to_date('2010-12-14:09:56:53', 'YYYY-MM-DD:HH24:MI:SS') ;
res COURSE_LECTURE%rowtype; 
begin
return_rows_LECTURE_BY_DATE(to_date('2010-12-14', 'YYYY-MM-DD'),k);
loop
  FETCH  k into res;
  Exit when k%notFound;
  DBMS_OUTPUT.PUT_LINE(res.COURSE_NAME );
  end loop;
end;

但我收到了这个错误:

  

错误报告 - ORA-01830:日期格式图片在转换前结束   整个输入字符串ORA-06512:在“HR.RETURN_ROWS_LECTURE_BY_DATE”,   第4行ORA-06512:第6行   01830. 00000 - “日期格式图片在转换整个输入字符串之前结束”

2 个答案:

答案 0 :(得分:4)

您正在使用TO_TIMESTAMP()将日期转换为时间戳,这需要character as a parameter。您应该使用CAST()代替,它将一种数据类型转换为另一种数据类型;例如:

WHERE LECT_DATE_TIME_START >= CAST(in_date AS TIMESTAMP)

对于从日期到时间戳的所有转换,您应该这样做;因此to_timestamp(in_date+1, 'dd-mm-yyyy')变为CAST((in_date + 1) AS TIMESTAMP)

答案 1 :(得分:-1)

问题在于语句to_timestamp(in_date,&#39; dd-mm-yyyy&#39;)提供的格式太短,你可以使用它而没有任何格式条件to_timestamp(in_date)。