2009-06-09 8 views
2

Oracle 8の有効な日付のテスト。Oracleプロシージャのパラメータ

プロシージャに日付を渡すとき、私は ''を渡すことができ、何もスローされません。

MYDATE := ''のテストはtrueに評価されません。 LENGTH < 1もありません。 DBMS_OUTPUTは、パラメータから何も来ないことを示します。

'01-30-2009' (instead of 30-JAN-2009)を渡そうとすると、無効な日付エラーがスローされます。

長さゼロの文字列を渡す方法は有効ですか?

有効な日付をテストするにはどうすればよいですか?

+0

NULLでテストしましたか? – tekBlues

答えて

5

Oracleのそれ以降のバージョンでは、空の文字列はNULLとみなされます。それはおそらくあなたが走っているものです。

パラメータをnullに設定してから、エラーを出力する必要があります。 (コメントの中でJeffery Kempが指摘したように、パラメータにnot nullを使用できません)

無効な日付エラーに関する限り、Oracleは暗黙的に文字列をdd-mmm- yyyy。それ以外の場合は、適切なマスクでto_dateを実行する必要があります。

私はOracle 8に精通していないので、新しいものかどうか分かりません。うまくいけば、これは役に立ちます。

+0

ありがとう···。それを試したはずです! – Sam

+1

Oracleプロシージャは、残念ながらNOT NULLとしてパラメータを宣言できません。プロシージャ内のパラメータが最初にNULLであるかどうかをチェックする必要があります。 –

2

個人的には、日付は日付、文字列は文字列です。暗黙的な変換を無効にする方法があることを願っています。あなたがプロシージャを呼び出すのプログラムをコントロールしている場合しかし、あなたは試すことができます:

call my_proc(to_date('01-30-2009','MM-DD-YYYY')); 

の代わり:

call my_proc('01-30-2009'); 

をそれ以外の場合は、お使いの手順は、文字列を受け取り、プロシージャ内のフォーマットを確認します

create procedure my_proc(p_date_str in varchar2) is 
    v_dt date; 

begin 
    if length(v_dt) != 10 then 
    raise_application_error(-20000,'Wrong date format',true); 
    end if; 
    v_dt := to_date(p_date_str,'MM-DD-YYYY'); 
    ... now use v_dt as a date ... 
end; 
/
関連する問題