2017-02-22 19 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

どのように機能を呼び出すのですか? –

+1

それは私のために働いています。関数のパラメータに日付の値を正しく割り当ててもよろしいですか? – pablomatico

+0

など。 '二重から' uf_todate(to_date('01 .01.1800 '、' dd.mm.yyyy '))を選択します。 SQL Developerから呼び出すと効果がありますか? 01-JAN-1800を返します。 – Rubio

答えて

0

SQL Developerの「コミット」ボタンをクリックしたように見えても、機能の変更はコミットされませんでした。 commit;を明示的に実行しています。

+0

いいえ、 'create or replace'はDDLであり、別途コミットする必要はありません。 –

+0

どのような場合でも、別のコミットを入力すると関数が置き換えられ、作業が開始されました。 – Rubio

+0

再現可能なテストケースまたはそれが発生しませんでした。 –

関連する問題