функция to_date pl / sql - PullRequest
       21

функция to_date pl / sql

1 голос
/ 25 марта 2010
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 ]

12 голосов
/ 25 марта 2010

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

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 голос
/ 25 марта 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...