2011-05-04 33 views
5

Hey, PL/SQL bu sorgu var:PL/SQL nerede

--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 

ben arasında AND filtresi olması gerekir ** isteğe bağlı olmak gerekirse, ben orada bir numara koymak eğer öyleyse olursa olsun sorgu Tamam çalışır, bu mümkün mü?

Teşekkürler!

cevap

7

Parametreyi varsayılan bir NULL değeriyle bildirin. Bu durumda, prosedüre geçilmezse, otomatik olarak boş olacaktır.

Sonra etmek koşulu değiştirin:

VE (a_number IS NULL VEYA swsporderlineid = a_number)

+0

diğer olasılık 'VE NVL (a_number, swsporderlineid) = swsporderlineid'. – angus

+0

@angus: "swsporderlineid" asla boş olmadığı sürece (muhtemelen bunu varsaymakla aynı şey). –

+0

@Adam Paynter: Haklısınız. A_number boşsa ve swsporderlineid boş olduğunda, a_horse_with_no_name (ve sizinki) durumunuz doğru döner ve null. – angus

4

Bu OR fıkra ile swsporderlineid = a_number maddesini değiştirebilirsiniz: a_number null ise

WHERE  swobjectid IN (SELECT swsporderlineid 
          FROM sw_sp_order_line 
          WHERE swsporderid = 21444963 --Orden 
           AND (swsporderlineid = a_number OR a_number IS NULL)); 

nedenle, ikinci satır sorgu devam ettirilmesine imkan veren tüm kayıtlar için true olarak değerlendirilir.