to_date函数pl / sql

时间:2010-03-25 12:02:15

标签: oracle plsql plsqldeveloper

undefine dates

declare
  v_dateInput VARCHAR(10);
  v_dates DATE;
begin
  v_dateInput := &&dates;
  v_dates := to_date(v_dateInput,'dd-mm-yyyy');
  DBMS_OUTPUT.put_line(v_dates);
end;

不确定为什么每次运行此代码时,例如03-03-1990的输入,都会显示此错误。

Error report:
ORA-01847: day of month must be between 1 and last day of month
ORA-06512: at line 6
01847. 00000 -  "day of month must be between 1 and last day of month"
*Cause:    
*Action:

2 个答案:

答案 0 :(得分:12)

哈,好的。那是因为&&在原地替换变量,因此您的脚本变为:

declare
  v_dateInput VARCHAR(10);
  v_dates DATE;
begin
  v_dateInput := 03-03-1990;
  v_dates := to_date(v_dateInput,'dd-mm-yyyy');
  DBMS_OUTPUT.put_line(v_dates);
end;

请注意没有引号。 v_dateInput实际上是'-1990',因为oracle会计算03 - 03 - 1990的数值。当然,这不适用于给定的格式字符串。

要解决此问题,您需要

v_dateInput := '&&dates';

答案 1 :(得分:1)

当提示输入日期值时,请确保将其放在单引号中,例如

Enter value for dates: '03-03-1990'

分享并享受。