2012-08-16 79 views
0

我需要查詢一個表,如select count(id) from user where id in ('208018042','208001105'),我已經寫了一個函數來做到這一點接受分號分隔數據,但我得到無效數字作爲例外,我想我不是發送值在報價,什麼是錯的需要這兒過得通過像「208018042'208001105」上述單查詢被執行,但一些問題在下面的函數查詢值:問題與程序立即執行

FUNCTION p_get_count_id(p_invalue IN VARCHAR2) RETURN VARCHAR2 IS 
      v_splitTable  split_tbl; 
      v_OptionValueList varchar2(4000); 
      v_in_optid_list varchar2(4000); 
      v_count   number; 
    begin 
    v_in_optid_list := p_in_field_value; 
    if (v_in_optid_list is not null) then 
     v_in_optid_list := REPLACE(p_in_field_value, ';', ','); 

EXECUTE IMMEDIATE 'select count(id) 
     from user 
    where id in 
      (' || v_in_optid_list || ')' bulk collect 
     into v_splitTable; 
     v_OptionValueList := joinstr(v_splitTable, '; '); 
    end if; 
    return v_OptionValueList; 
End p_get_count_id; 

的執行直接導致一個問題。

+0

您可以在調用立即執行之前直接顯示「v_in_optid_list」的值嗎?例如'dbms_output.put_line(v_in_optid_list);' – schurik 2012-08-16 13:33:05

回答

1

它不起作用。使用集合或流水線函數或臨時表將函數傳入可能值列表

+0

您的查詢返回數字,但您正嘗試將數字分配給收集。你爲什麼不能把數字轉換成數字,然後填充返回值? – 2012-08-16 13:41:40

+0

此外,您不需要該功能就可以獲得您要求的功能。你可以使用連接子句 – 2012-08-16 13:51:05

+0

解析逗號分隔的字符串在sql中非常簡單,爲什麼不呢?該集合將只包含一個值,這不是錯誤。 – schurik 2012-08-16 13:58:12