0

従業員番号を関数に渡し、入社日を取得しています。

一致するレコードが見つからない場合に NULL を返すようにします。私の場合、空白または空の行を返すだけです。

get_join_date(in_emp_no)

CREATE OR REPLACE FUNCTION get_join_date(in_emp_no) RETURN DATE IS
  v_join_date DATE;
  BEGIN
    SELECT joined_date
    INTO v_date
    FROM employee
    WHERE employee_number = in_emp_no
          AND type = in_type;

    IF v_join_date IS NOT NULL        THEN
      v_join_date := v_date;
    ELSE
      v_join_date = NULL;
    END IF;

    RETURN v_join_date;
  END;
4

2 に答える 2

5

一致するレコードが見つからない場合、NO_DATA_FOUND 例外が発生します。この例外をキャプチャして何かを返す必要があります。

また、nullかどうかを確認v_join_dateし、null の場合は null 値を割り当てます。これを行う必要はありません。

create or replace function get_join_date( 
      Pemp_no in number
     ) return date is

   l_join_date date;

begin

   select joined_date into l_join_date 
     from employee
    where employee_number = Pemp_no
      and type = in_type;

   return l_join_date;

exception when no_data_found then
   return null;

end;

その他のエラーは次のとおりです。

  1. 選択してv_dateいますが、変数を次のように宣言しましたv_join_date
  2. endステートメントの後にセミコロンはありません。
  3. endifステートメントの後にセミコロンはありません。
  4. endifは 2 つの単語です。end if;
  5. in_emp_noたとえば、必要なパラメータのデータ型を宣言していません(長さは宣言していません)。... function get_join_date ( Pemp_no number ) ...
于 2013-09-03T07:11:13.580 に答える