簡體   English   中英

PL-SQL存儲過程拆分字符串

[英]PL-SQL stored procedure split string

我想做的是這樣的:

在java中,我有一個[[AB','BC','CD','DE']之類的數組,我想將其連接到諸如“ AB,BC,CD,DE”之類的東西並將其作為參數發送給過程。

在程序中,我的想法是,我想做類似

v_passedArgs --(AB,BC,CD,DE)

SELECT * FROM SOME_TABLE WHERE SOME_COL IN (v_passedArgs.split(','))

是否可以做類似的事情,或者您有其他想法? 謝謝

您可以在數據庫中創建一個拆分函數,並將其用於在SQL中拆分帶有定界符(在您的示例中為',')的字符串

是否有在PL / SQL中拆分字符串的功能?

請參考上面的鏈接創建一個拆分函數,並在您的select語句中使用它

您必須創建自己的功能。

您可以使用Oracle PL / SQL集合 這是一段代碼,從帶有給定分隔符( p_sep )的輸入字符串列表( p_list )返回這樣的集合:

CREATE OR REPLACE TYPE t_my_list AS TABLE OF VARCHAR2(100);
CREATE OR REPLACE
FUNCTION cto_table(p_sep in Varchar2, p_list IN VARCHAR2)
  RETURN t_my_list
AS
  l_string VARCHAR2(32767) := p_list || p_sep;
  l_sep_index PLS_INTEGER;
  l_index PLS_INTEGER := 1;
  l_tab t_my_list     := t_my_list();
BEGIN
  LOOP
    l_sep_index := INSTR(l_string, p_sep, l_index);
    EXIT
  WHEN l_sep_index = 0;
    l_tab.EXTEND;
    l_tab(l_tab.COUNT) := TRIM(SUBSTR(l_string,l_index,l_sep_index - l_index));
    l_index            := l_sep_index + 1;
  END LOOP;
  RETURN l_tab;
END cto_table;
/

然后如何在SELECT使用TABLE關鍵字使用它TABLE關鍵字將集合轉換為可在Oracle SQL查詢中使用的對象:

SELECT * FROM SOME_TABLE WHERE SOME_COL IN (
      select * from TABLE(cto_table(',', v_passedArgs))
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM