2014-02-27 45 views
0

我与Oracle合作化妆条件,如果在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斧:

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' 

我怎样才能使这个测试我的查询

更新时间:

我想deveop功能:

在此功能

首先我应该运行此查询

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' 

那我想要t Ø进行有关导致第一次查询的测试:

如果unit.id_unit =“allorg”

我的函数的结果应该有这个疑问

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

做的第一查询的结果只返回一个值? 如果是,您可以将该结果分配给一个变量(您必须在同一个函数中声明该变量)。

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');