2010-03-25 67 views
1
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,就会显示此错误。to_date函数pl/sql

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: 

回答

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'; 
+0

啊,我的一个愚蠢的错误,谢谢你的帮助 – user297285 2010-03-25 12:14:17

1

当系统提示您输入的日期值确保你把它放在单引号,例如

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

分享和享受。