【问题标题】:PL-SQL stored procedure split stringPL-SQL 存储过程拆分字符串
【发布时间】:2017-06-05 05:24:30
【问题描述】:

我想做的是:

在 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 stored-procedures plsql


    【解决方案1】:

    您可以在数据库中创建一个拆分函数,并使用它来拆分 SQL 中具有分隔符的字符串(在您的示例中为“,”)

    Is there a function to split a string in PL/SQL?

    参考上面的链接创建一个拆分函数并在你的选择语句中使用它

    【讨论】:

    • 鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。
    【解决方案2】:

    你必须创建自己的函数。

    您可以使用 Oracle PL/SQL collection;这是一段代码,用于从带有给定分隔符 (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))
    )
    

    【讨论】:

      猜你喜欢
      • 2011-04-29
      • 2016-09-20
      • 1970-01-01
      • 2013-02-05
      • 2021-01-06
      • 1970-01-01
      • 2018-11-10
      • 2017-12-21
      • 1970-01-01
      相关资源
      最近更新 更多