2016-06-29 3 views
0

PL/SQL 코드에서 나는 특정 직원의 테이블에서 designation_code 잡아 변수가 있습니다.오라클 plsql 복잡한 진술 안에 경우 조건

STMT # 1

select basic_designation into source_designation 
    from tbl_emp_basic_profile where basic_id=source_id; 

는 지금은 source_designation이 코드 여부의 집합에 있는지 확인해야합니다. 은 {코드 세트는} 다음과 같은 SQL에 의해 발생 될 수 있습니다

STMT # 2

select distinct(BASIC_DESIGNATION) as "SET_OF_CODES" 
    from TBL_EMP_BASIC_PROFILE 
where BASIC_DESIGNATION in (select to_number(SD_DESIGNATION_CODE) 
         from TBL_SETTINGS_DESIGNATION 
         where lower(SD_DESIGNATION_NAME) like '%professor%' 
         or lower(SD_DESIGNATION_NAME) like '%lecturer%'); 

내가 어떻게해야합니까? 간단히 다음과 같은 IF 문을 쓸 수 있을까요?

IF(source_designation in (STMT#2)) then 
    --do somtehing 
END IF; 
+0

왜 'WHERE' 절에 조건을 추가하지 않으시겠습니까? 이렇게 :'select from v_exists from ... where ... 그리고 BASIC_DESIGNATION = source_designation'. 'v_exists'는 찾지 못하면 0을 반환하고, 발견 된 일치 항목을 기반으로 0보다 큰 값을 반환합니다. –

+0

yah 이제 두 번째 명령문을 첫 번째 명령문의'where' 절로 추가했습니다. 덕분에 지금은 작동합니다. –

답변

0

이렇게 할 수 있습니다.

1) 컬렉션 을 선언하십시오. 2) 모든 값을 SQL에서 collection으로 가져옵니다. 3) 귀하의 가치가 소장되어 있는지 확인하십시오.

예.

declare 
    type T_SET_OF_CODES is table of varchar2(xxx); -- where xxx is appropriate size of varchar2 for size_of_codes 
    V_SET_OF_CODES T_SET_OF_CODE; 
    begin 


    select distinct(BASIC_DESIGNATION) as "SET_OF_CODES" bulk collect into V_SET_OF_CODES 
     from TBL_EMP_BASIC_PROFILE 
    where BASIC_DESIGNATION in (select to_number(SD_DESIGNATION_CODE) 
          from TBL_SETTINGS_DESIGNATION 
          where lower(SD_DESIGNATION_NAME) like '%professor%' 
          or lower(SD_DESIGNATION_NAME) like '%lecturer%'); 

    IF source_designation member of V_SET_OF_CODES then 
     --do somtehing    
    END IF; 

    end; 
1

나는 여분의 스캐닝을 피하기 위해 존재를 사용하고 예외 처리를 피하기 위해 카운트를 사용합니다.

select count(1) 
    into designation_is_in_set 
    from dual 
where exists (select 1 from TBL_SETTINGS_DESIGNATION 
where to_number(SD_DESIGNATION_CODE)=source_designation 
    and (
     lower(SD_DESIGNATION_NAME) like '%professor%' 
    or lower(SD_DESIGNATION_NAME) like '%lecturer%' 
     ) 
); 
if designation_is_in_set=1 then 
    -- the des is in the set 
else 
    -- the des is not in the set 
end if;