2013-07-24 4 views
0

У меня есть функция, которая принимает 2 параметра даты:Oracle - буквальный не соответствует формату строки

CREATE OR REPLACE FUNCTION date_equal 
(
    date1 IN DATE, 
    date2 IN DATE 
) 
RETURN NUMBER IS 
    equal BOOLEAN; 
BEGIN 
    equal := NVL(date1, '1999-01-01') = NVL(date2, '1999-01-01'); 
    IF equal THEN 
     RETURN 1; 
    ELSE 
     RETURN 0; 
    END IF; 
END date_equal; 
/

Теперь, когда я бегу выбрать на столе, который предоставляет данные для функции она функционирует нормально:

SELECT TO_DATE(some_date, 'YYYY-MM-DD') FROM tbl 

Но когда я пытаюсь использовать это в функции называют его не удается:

сообщение
SELECT date_equal(TO_DATE(some_date, 'YYYY-MM-DD'), TO_DATE(some_date, 'YYYY-MM-DD')) FROM tbl 

ошибка «буквального Do es не соответствует строке формата ". Кто-нибудь знает, почему это произойдет?

ответ

4

Когда вы

NVL(date1, '1999-01-01') 

Oracle пытается преобразовать '1999-01-01' до даты неявно (с date1 является дата).
для этого он использует NLS_DATE_FORMAT, который не может быть yyyy-mm-dd

Вы можете использовать явное преобразование:

NVL(date1, to_date('1999-01-01', 'yyyy-mm-dd')) 

или использовать путь ANSI

NVL(date1, date '1999-01-01') 
2

сообщение об ошибке, безусловно, вызванное чтение пиара NVL(date1, '1999-01-01').

Попробуйте nvl(date1, date '1999-01-01') вместо этого.

Смежные вопросы