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

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)(续)-LMLPHP

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

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

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

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

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

5,使用表,获取值。

where gs.movetypeid='' and gs.createdate between '' and ''   
and gs.customerid=''
and m1.materialsortid in (SELECT COLUMN_VALUE FROM table ((select SP_YX_SPLIT('00000000000000001283,00000000000000000714',',') from dual)))
05-11 13:12