-1

--inputdate は「mm/dd/yyyy」の形式にする必要がありますが、これを「mm/yyyy」のみに変換する必要があります

procedure validatedate(inputdate date)

declare
l_tmpdate varchar2(20);

BEGIN

  if inputdate is NOT NULL then
   BEGIN
   l_tmpdate:=to_char(inputdate ,'mm/yyyy');
   end;
   else
     dbms_output.put_line('Mandatory input should be given--Date should not be NULL');
     RAISE application_error;

//日付が無効な場合の実行方法。つまり、日付形式が mm/dd/yyyy 形式以外で受信された場合、「無効な入力が指定されました」のようなメッセージを表示する必要があります。

   raise error;
4

2 に答える 2

2

パラメータinputdatedate既になので、無効にすることはできません*。あなたが言った:

表では、2007 年 6 月 19 日 10:05:00AM (mm/dd/yyyy 形式) として格納された値

日付は数値として内部的に保存され、フォーマットされません。テーブルに値を照会するとdate、クライアントはその内部表現を取得し、その設定または NLS_DATE_FORMAT に基づいて文字列に変換し、認識可能なものを提供します。

呼び出している手順to_char(input_date)では、常に有効な日付で動作するため、確認する必要はありません。しかし、使用しないのでl_tempdate、無意味なチェックのように思えます。

文字列をプロシージャに渡し、それを日付に変換する場合は別の問題になります。次に、常に有効な値が渡されることを保証できることがわかっていない限り、無効な入力を許可して処理する必要があります。たとえば、検証を行ったアプリケーション層からのみ呼び出される場合です。しかし、絶対確実なものはありません。

*まあ、通常; 無効な日付を作成することは可能ですが、それは大変な作業であり、ほぼ確実にここで心配する必要はありません。

于 2013-11-14T17:56:56.327 に答える
1

日付形式は受け取りません。有効な日付または定義により NULL である日付を受け取ります。何もチェックする必要はありません (必要に応じて NULL を除く)。「mm/yyyy」など、任意の形式で日付を表示できます。

于 2013-11-14T17:56:40.363 に答える