2017-02-22 8 views
0

Почему это не вызывает ошибку приложения? Если я выполняю тот же код в анонимном блоке, он работает, то есть вызывает ошибку приложения.Oracle - Как повысить ошибку приложения от функции

CREATE OR REPLACE FUNCTION uf_todate(dt IN date) 
    RETURN VARCHAR2 
IS 
BEGIN 
    IF dt < to_date('01.01.1900','dd.mm.yyyy') THEN 
    raise_application_error(-20001, 'Date is less than 1/1/1900.'); 
    END IF; 

    RETURN nvl(upper(to_char(dt ,'dd-mon-yyyy', 'NLS_DATE_LANGUAGE=English')), '31-DEC-9999'); 
END; 

Это Oracle 12c.

+0

Как вы работаете _call_? –

+1

Это работает для меня. Вы уверены, что правильно присвоили значение даты параметру функции? – pablomatico

+0

. 'select uf_todate (to_date ('01 .01.1800 ',' dd.mm.yyyy ')) из double'. Имеет ли это эффект, если я вызываю его из SQL Developer? Он возвращает 01-JAN-1800. – Rubio

ответ

0

Похоже, что нажатие кнопки Commit в SQL Developer не вносило изменений в функцию. Выполнение commit; явно сработало.

+0

Нет, 'create or replace' является DDL и не требует отдельной фиксации. –

+0

В любом случае ввод отдельной фиксации заменил функцию, и она начала работать. – Rubio

+0

Воспроизводимый тестовый чехол, иначе этого не произошло. –