在sql查询中设置条件if
我在甲骨文公司工作 我想在sql查询中设置条件if 这是我的sql查询:在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
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子句中的条件,你的左连接正在变成规则的内部连接,而且,这或可能是扔东西太多,首先要评估!。请给我们样品开始和结果数据。