繁体   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