2015-03-31 33 views
0

我需要根据函数中给定的参数值选择计数。函数参数值可以是'I'或'D'或'ALL'。 'ALL'表示我和D两者。如何在oracle中传递多个值(逗号分隔)单个变量sql

为前:

create or replace function test1(FLAG in varchar2) return varchar2 

    as 

    b varchar2(20); 
    c varchar2(20); 

    begin 
    if flag='ALL' 
    then 
    c:='I','D'; 
    else 
    c:=FLAG; 
    end if; 
    select count(*) into b from test where id=c; 

    return b; 

    end; 

如果我通过我或者d其工作fine.I想通过 'ALL' 作为参数来拾取所有两个(I,d)计数,但我面对错误。

让我知道在我的结尾是否需要其他信息。

+0

尝试运算符IN而不是= – 2015-03-31 10:20:21

+0

我也尝试过.its不工作参数'ALL' – user2862073 2015-03-31 10:21:04

回答

1

有几种方法可以做到这一点,对于您的情况来说都很复杂。它会更容易,如果你从你的IF语句在SQL中使用的逻辑:

select count(*) into b from test where flag = 'ALL' or id = flag 

因此,如果您在FLAG通过所有,那么你得到的一切表,否则如果FLAG是不是所有的,那么你将其限制为特定值。如果你想在ID限制只提到那么你可以做这样的2个值:

select count(*) into b 
    from test 
where (flag = 'ALL' and id in ('I','D')) 
    or id = flag 
+0

no ..它不会工作..column ID有两个值'我'和'D' – user2862073 2015-03-31 10:24:29

+0

从你什么有你的问题,这将正常工作@ user2862073;你有没有试过,如果它不起作用,你的数据看起来像什么_exactly_? – Ben 2015-03-31 10:27:30

+0

哇......在工作......感谢您的帮助 – user2862073 2015-03-31 10:31:39

0

如果else块需要改变,以满足您的要求。下面列出了更新后的代码。

创建或替换功能TEST1(在VARCHAR2 flag_var)返回VARCHAR2

作为

count_num NUMBER(20); 

begin 

    if flag_var='ALL' 
    then 
     select count(*) into count_num from TEST where ID in ('I' , 'D'); 
    else 
    select count(*) into count_num from TEST where ID = flag_var; 
    end if; 

return count_num; 

端;