首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PL/SQL过程-如果为null则忽略参数

问PL/SQL过程-如果为null则忽略参数
EN

Stack Overflow用户
提问于 2014-02-20 08:58:28
回答 2查看 1.5K关注 0票数 1

我有一个过程,它接受三个参数,然后根据这些参数查询一个表。现在其中一个可以是null,如果是的话,我希望在选择的WHERE子句中忽略它。

代码语言:javascript
复制
create or replace PROCEDURE Procedure1 
(
   COUNTRY IN VARCHAR2, MAKE IN VARCHAR2, SERIAL IN number
) AS

BEGIN

DECLARE
  CURSOR c1 IS  select v.ID from vehicle v   
                where v.country = COUNTRY AND 
                      v.make = MAKE AND 
                      ((SERIAL IS NOT NULL AND v.serial = SERIAL) OR 1);


BEGIN 

  FOR e_rec IN c1 LOOP

    DBMS_OUTPUT.PUT_LINE(e_rec.id);

  END LOOP;

END;
END Procedure1;

我试过这样的方法但不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-20 09:02:02

您可以使用以下条件

代码语言:javascript
复制
WHERE v.country = COUNTRY AND 
                      v.make = MAKE AND 
                     (SERIAL IS NULL or v.serial = SERIAL)

这也能起作用

代码语言:javascript
复制
WHERE v.country = COUNTRY AND 
                  v.make = MAKE AND 
((SERIAL IS NOT NULL AND v.Serial = SERIAL) OR SERIAL IS NULL)
票数 2
EN

Stack Overflow用户

发布于 2014-02-20 21:42:07

试试这个--这和米勒建议的使用NVL功能一样。

代码语言:javascript
复制
WHERE v.country = nvl(COUNTRY,v.country) 
AND v.make = nvl(MAKE,v.make)   
AND v.serial = nvl(SERIAL,v.serial) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21902779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档