2015-03-31 61 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; 

端;