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

use*_*442 1 sql oracle timestamp date 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;
Run Code Online (Sandbox Code Playgroud)

输入:日期,输出:该日期的讲座。表(视图)中的日期为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;
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误:

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

小智 6

您正在通过使用TO_TIMESTAMP(),将日期转换为时间戳,时间戳以字符作为参数。您应该CAST()改为使用,它将一种数据类型转换为另一种数据类型。例如:

WHERE LECT_DATE_TIME_START >= CAST(in_date AS TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)

您应该使用从日期到时间戳的所有转换来执行此操作;因此to_timestamp(in_date+1, 'dd-mm-yyyy')成为CAST((in_date + 1) AS TIMESTAMP)

  • 这是一个荒谬的原因@ user3868442; 特别是当这是正确答案时。如果您不了解某些内容,请[在文档中查找](http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions023.htm#SQLRF00613)。 (4认同)