2010-03-25 4 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 function 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

Ha, хороший. Это потому, что & & заменяет переменную на месте, так что ваш сценарий становится:

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

1

Когда будет предложено ввести значение даты убедитесь, что вы поместите его в одинарные кавычки, например

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

Делитесь и наслаждайтесь.