如何在oracle sql中传递多个值(逗号分隔)单个变量

时间:2015-03-31 10:16:10

标签: sql oracle

我需要根据函数中给定的参数值选择计数。函数参数值可以是'我'或者' D'或者'所有'。 ' ALL'意味着我和D都是。

代表:

  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;

如果我通过I或D工作正常。我想通过' ALL'如在参数中选择两个(I,D)的所有计数但我面临错误。

如果我在结束时需要任何其他信息,请告诉我。

2 个答案:

答案 0 :(得分:1)

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

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

因此,如果您传入FLAG ALL,那么您将获得表中的所有内容,否则如果FLAG不是ALL,则将其限制为特定值。如果您想将ID限制为仅提到的2个值,那么您可以这样做:

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

答案 1 :(得分:0)

如果需要更改块以满足您的要求。更新的代码如下所列。

创建或替换函数test1(varchar2中的flag_var)return varchar2

as

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;

端;