PL / SQL可选哪里

时间:2011-05-04 12:51:41

标签: sql oracle plsql

嘿,我在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过滤器是可选的,所以无论我在那里放一个数字,查询都运行正常,这是否可行?

谢谢!

2 个答案:

答案 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,允许查询继续。