2014-02-27 4 views
0

나는메이크업 조건 SQL 쿼리에

내가 내 SQL 쿼리에 조건을 경우 확인하려면 오라클 작업하는 경우

이 내 SQL 쿼리 :

SELECT unit.id_unit AS id, 
     unitLang.abbreviated_name_unit|| ' - ' ||unitLang.name_unit_lang 
AS name_unit_lang 
FROM unit unit 
LEFT OUTER JOIN employee on employee.id_unit = unit.id_unit 
LEFT OUTER JOIN unit_lang unitLang on unitLang.id_unit = unit.id_unit 
LEFT OUTER JOIN security_employee_unit secUnit ON unit.id_unit = secUnit.id_unit 
where unitLang.lang_unit_lang = 'ar' and 
     unit.statut = '1' and 
     employee.id_employe = 'EM-000008' or 
     secUnit.id_employee = 'EM-000008' AND 
     secUnit.type = 'S' 

내가 테스트를 추가 할

이것은 내 테스트입니다 :

if unit.id_unit = 'allorg'쿼리에이 synt가 있습니다. 도끼 : 처음에는이 쿼리를 실행해야이 기능에

: 나는 기능을 deveop 할

: 나는 업데이트 내 쿼리

에서이 테스트를 할 수있는 방법

SELECT unit.id_unit AS id, 
     unitLang.abbreviated_name_unit|| ' - ' ||unitLang.name_unit_lang 
AS name_unit_lang 
FROM unit_lang unitLang, unit unit 
where unit.id_unit = unitLang.id_unit and 
     unitLang.lang_unit_lang = 'ar' and 
     unit.statut = '1' 

SELECT unit.id_unit AS id, 
      unitLang.abbreviated_name_unit|| ' - ' ||unitLang.name_unit_lang 
    AS name_unit_lang 
    FROM unit unit 
    LEFT OUTER JOIN employee on employee.id_unit = unit.id_unit 
    LEFT OUTER JOIN unit_lang unitLang on unitLang.id_unit = unit.id_unit 
    LEFT OUTER JOIN security_employee_unit secUnit ON unit.id_unit = secUnit.id_unit 
    where unitLang.lang_unit_lang = 'ar' and 
      unit.statut = '1' and 
      employee.id_employe = 'EM-000008' or 
      secUnit.id_employee = 'EM-000008' AND 
      secUnit.type = 'S' 

내 함수의 결과가

SELECT unit.id_unit AS id, 
      unitLang.abbreviated_name_unit|| ' - ' ||unitLang.name_unit_lang 
    AS name_unit_lang 
    FROM unit_lang unitLang, unit unit 
    where unit.id_unit = unitLang.id_unit and 
      unitLang.lang_unit_lang = 'ar' and 
      unit.statut = '1' 
+1

를 사용하여 저장 프로 시저를 작동합니다. 그리고 동적 쿼리를 만드십시오. –

+1

'allorg' 란 무엇입니까? –

+0

allorg is id_unit, – franco

답변

0

가 첫 번째 쿼리를합니까이 쿼리의 결과를해야 = 'allorg'unit.id_unit 경우

: 오 첫 번째 쿼리의 결과에 관한 시험을 하나의 값만 반환합니까? 예인 경우 해당 결과를 변수에 할당 할 수 있습니다 (동일한 함수에서 선언해야 함).

declare 
var_unit_id varchar2(50); 
var_other varchar2(250); 
begin 
SELECT unit.id_unit AS id, 
      unitLang.abbreviated_name_unit|| ' - ' ||unitLang.name_unit_lang AS name_unit_lang 
into var_unit_id, var_other 

    FROM unit unit 
    LEFT OUTER JOIN employee on employee.id_unit = unit.id_unit 
    LEFT OUTER JOIN unit_lang unitLang on unitLang.id_unit = unit.id_unit 
    LEFT OUTER JOIN security_employee_unit secUnit ON unit.id_unit = secUnit.id_unit 
    where unitLang.lang_unit_lang = 'ar' and 
      unit.statut = '1' and 
      employee.id_employe = 'EM-000008' or 
      secUnit.id_employee = 'EM-000008' AND 
      secUnit.type = 'S'; 

이제

if var_unit_id = 'allorg' then 
--put your code here 
SELECT unit.id_unit AS id, 
      unitLang.abbreviated_name_unit|| ' - ' ||unitLang.name_unit_lang 
    AS name_unit_lang 
    FROM unit_lang unitLang, unit unit 
    where unit.id_unit = unitLang.id_unit and 
      unitLang.lang_unit_lang = 'ar' and 
      unit.statut = '1' 
end if; 

처럼 확인할 수 있습니다하지만 함수는 하나의 값을 반환하지만 결과 쿼리는 두 개의 값을 반환합니다. 반환 값을 어떻게 얻으려고합니까?

귀하의 요구에 대한
0

, 단 하나의 쿼리는

SELECT unit.id_unit AS id, 
      unitLang.abbreviated_name_unit|| ' - ' ||unitLang.name_unit_lang 
    AS name_unit_lang 
    FROM unit_lang unitLang, unit unit 
    where unit.id_unit = unitLang.id_unit and 
      unitLang.lang_unit_lang = 'ar' and 
      unit.statut = '1' and 
      exists (SELECT 'x' 
         FROM unit unit 
         LEFT OUTER JOIN employee on employee.id_unit = unit.id_unit 
         LEFT OUTER JOIN unit_lang unitLang on unitLang.id_unit = unit.id_unit 
         LEFT OUTER JOIN security_employee_unit secUnit ON unit.id_unit = secUnit.id_unit 
         where unitLang.lang_unit_lang = 'ar' and 
           unit.statut = '1' and 
           (employee.id_employe = 'EM-000008' or ecUnit.id_employee = 'EM-000008') AND 
           secUnit.type = 'S' and 
           unit.id_unit = 'allorg');