• 逗号分隔的字符串转换为行数据(collection)(续)


    逗号分隔的字符串转行数据的存储过程一个:

    CREATE OR REPLACE FUNCTION SP_YX_SPLIT
    (
        p_list CLOB, 
        p_sep VARCHAR2 := ','
    ) 
    RETURN tabletype
    PIPELINED 
    /************************************** 
    * Name: split 
    * Author: zhaoqiang. 
    * Date: 2014-10-03. 
    * Function: 返回字符串被指定字符分割后的表类型。 
    * Parameters: p_list: 待分割的字符串。 
    p_sep: 分隔符,默认逗号,也可以指定字符或字符串。 
    * Example: SELECT * 
    FROM users 
    WHERE u_id IN (SELECT COLUMN_VALUE 
    FROM table (split ('1,2'))) 
    返回u_id为1和2的两行数据。 
    **************************************/ 
    IS 
        l_idx PLS_INTEGER; 
        v_list VARCHAR2 (32676) := p_list; 
        BEGIN 
        LOOP 
        l_idx := INSTR (v_list, p_sep); 
        IF l_idx > 0 
        THEN 
        PIPE ROW (SUBSTR (v_list, 1, l_idx - 1)); 
        v_list := SUBSTR (v_list, l_idx + LENGTH (p_sep)); 
        ELSE 
        PIPE ROW (v_list); 
        EXIT; 
        END IF; 
        END LOOP; 
    END;

    2,调用存储过程方法,获取转化后的行数据(collection)

    select SP_YX_SPLIT('2,43,43,43',',') from dual

    打开Collection,可看到是这个字段是一个只有一列的列名为COLUMN_VALUE的表。

    3,得到的这个值,因为是collection,不能直接使用。例如:

    4,所以必须先把这个语句转化成Table类型。然后,当作一个表Table使用,通过COLUMN_VALUE获取里面的值。

    5,使用表,获取值。

    where gs.movetypeid='201' and gs.createdate between '20161203' and '20161203'   
    and gs.customerid='00010'
    and m1.materialsortid in (SELECT COLUMN_VALUE FROM table ((select SP_YX_SPLIT('00000000000000001283,00000000000000000714',',') from dual)))
  • 相关阅读:
    mysql 常用命令集锦
    linux系统端口查看和占用的解决方案
    Linux 基本命令
    Linux 内存优化
    maven 常用脚本
    linux 下maven安装
    MYSQL创建用户Unknown column 'plugin' in 'mysql.user'的解决方法
    mysql 安装及卸载 主从配置
    排序算法
    JDK和JRE的区别
  • 原文地址:https://www.cnblogs.com/alsf/p/6128837.html
Copyright © 2020-2023  润新知