嘿,我在PL / SQL中有这个查询:
--Ver todos los atributos de las OL de una OS.
SELECT attr.swspattrdataid attr_data_id,
att.swname attribute_swname,
attr.swvalue attr_data_swvalue
FROM sw_sp_attr_data attr,
sw_sp_attribute att
WHERE swobjectid IN (SELECT swsporderlineid
FROM sw_sp_order_line
WHERE swsporderid = 21444963 --Orden
**AND swsporderlineid = a_number**
);
AND att.swspattributeid = attr.swspattributeid
--AND att.swname LIKE '%%' --Filtrar por nombre
我需要让**之间的AND过滤器是可选的,所以无论我在那里放一个数字,查询都运行正常,这是否可行?
谢谢!
答案 0 :(得分:7)
使用默认值NULL声明参数。因此,如果它没有传递给程序,它将自动为空。
然后将条件更改为:
AND(a_number IS NULL或swsporderlineid = a_number)
答案 1 :(得分:4)
您可以使用此swsporderlineid = a_number
子句替换OR
子句:
WHERE swobjectid IN (SELECT swsporderlineid
FROM sw_sp_order_line
WHERE swsporderid = 21444963 --Orden
AND (swsporderlineid = a_number OR a_number IS NULL));
因此,如果a_number
为空,则第二行评估所有记录的true
,允许查询继续。