2010-03-25 93 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' 

分享和享受。