Простой запрос Oracle: литерал не соответствует строке формата - PullRequest
2 голосов
/ 03 февраля 2011

Я хочу выполнить простую функцию в Oracle. Подпись определяется следующим образом:

CREATE OR REPLACE FUNCTION NewCaseListForValidation
(
                             p_fromDate in DATE,
                             p_toDate in DATE,
                             p_rowCount in INT
)
RETURN
                             SYS_REFCURSOR
IS
                             return_value SYS_REFCURSOR;
...

Я должен быть в состоянии выполнить это с:

var rc refcursor
exec :rc := newcaselistforvalidation('2010-01-01','2011-01-01',100);
print :rc

Но при наборе "newcaselistforvalidation ('2010-01-01', '2011-01-01', 100)" я получаю:

ERROR at line 1:
ORA-01861: literal does not match format string
ORA-06512: at line 1

Я немного погуглил и, кажется, не могу понять, чтобы набрать дату в правильном формате. Кто-нибудь может мне помочь?

Ответы [ 4 ]

11 голосов
/ 03 февраля 2011

Запрос NLS_PARAMETERS в Oracle - тогда вы сможете увидеть, в каком формате ваша БД принимает даты.

Обычно, однако, я использую функцию to_date ():

to_date('01-01-2011','DD-MM-YYYY');

В Великобритании для ввода моих дат.

5 голосов
/ 03 февраля 2011

Альтернативой функции to_date () является использование стандартного формата ANSI для литералов DATE или TIMESTAMP:

DATE '2010-01-31'
TIMESTAMP '2010-01-31 21:22:23'

Дата и время всегда указываются с использованием правил ISO (ГГГГ-ММ-ДД и 24-часовой).формат для времени)

Это также работает на многих других (стандартных) СУБД.

1 голос
/ 25 мая 2011

Лучше не полагаться на конкретное значение в NLS_PARAMETERS настройках, потому что это заставит вашу функцию прервать в env с другим NLS_DATE_FORMAT .

Я бы явно указал форматирование даты в вашей функции, как предложено в ответе выше

exec :rc := newcaselistforvalidation(to_date('2010-01-01','YYYY-MM-DD'),to_date('2011-01-01','YYYY-MM-DD'),100);
0 голосов
/ 18 июня 2013

INSERT INTO tblDate (dateStart) Значения ('20-июнь-2013 '); Если вы замените целое число месяца на строку, «DD-MON-YYYY» будет действительной строкой данных, не вводя перед ней идентификатор DATE.

...