2013-09-03 8 views
0

함수에 직원 번호를 전달하고 가입 날짜를 반환합니다.일치하는 레코드가 없을 때 NULL을 반환합니다.

일치하는 레코드를 찾을 수 없을 때 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; 
+0

실행하면 데이터가 가장 좋은 생각이 아니다 취득 할 때마다를 선택합니다. 컬렉션을 만들고 채우고 컬렉션에서 값을 가져옵니다. 컬렉션은 세션 수준을 기반으로하므로 어디서나 액세스 할 수 있습니다. –

답변

2

를 들어, (하지만 길이)에 필요한 매개 변수 in_emp_no의 데이터 유형을 선언하지 않을 end if;

  • 해야한다, 두 단어입니다 하나의 기존 값이나 null을 사용하면 간단하게 집계 함수를 사용할 수 있습니다. 그것에 대해 MIN :

    CREATE OR REPLACE FUNCTION get_join_date(in_emp_no) RETURN DATE 
    IS 
        v_join_DATE DATE; 
    BEGIN 
        SELECT MIN(JOINED_DATE) 
        INTO v_join_DATE 
        FROM employee 
        WHERE employee_number = in_emp_no 
        AND TYPE=in_type; 
        return v_join_DATE; 
    end 
    
  • 5

    일치하는 레코드가 다음 NO_DATA_FOUND 예외가 발생한다 없으면; 이 예외를 포착하고 반환해야합니다.

    또한 v_join_date이 null인지 여부를 확인한 다음 null 인 경우 null 값을 할당합니다. 이것을 할 필요가 없습니다. 당신은 v_date로 선택하고

    1. 을하지만 end 문 뒤에는 세미콜론 없습니다 v_join_date
    2. 로 당신은 당신의 변수를 선언

      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; 
      

      다른 오류가 포함되어 있습니다.

    3. endif 성명 뒤에 세미콜론이 없습니다.
    4. endif
    5. 는 반환 할 것처럼이 당신은 예를 ... function get_join_date (Pemp_no number) ...
    +0

    Thanks Ben.got correct. – Ragav

    관련 문제