在sql查询中设置条件if

在sql查询中设置条件if,sql,oracle,Sql,Oracle,我在甲骨文公司工作 我想在sql查询中设置条件if 这是我的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

我在甲骨文公司工作

我想在sql查询中设置条件if

这是我的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'
我想添加一个测试

这是我的测试:

如果unit.id\u 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'
如何在查询中进行此测试

更新:

我想开发一个函数:

在这个函数中,首先我应该运行这个查询

 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'
然后我想对第一个查询的结果进行相关测试:

如果unit.id_unit='allorg'

我的函数的结果应该具有此查询的结果

 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'

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

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;

但是,一个函数将只返回一个值,但结果查询将返回两个值。您决定如何获取返回值?

对于您的需求,只需一个查询即可

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

使用存储过程。进行动态查询对不起,你的问题有点不清楚。你能重写它吗?我已经更新了我的问题,你最终想从函数返回什么?你的查询几乎肯定没有做你想做的,即使我们可以知道你要做什么-由于WHERE子句中的条件,你的左连接正在变成规则的内部连接,而且,这或可能是扔东西太多,首先要评估!。请给我们样品开始和结果数据。