oracle中添加split函数
1.创建表类型 www.2cto.com
CREATE OR REPLACE TYPE "TYPE_SPLIT" as table of varchar2(4000) ;
2.创建split 函数
CREATE OR REPLACE FUNCTION split(p_list VARCHAR2,
p_sep VARCHAR2 := ',') RETURN type_split
PIPELINED IS
l_idx PLS_INTEGER;
v_list VARCHAR2(4000) := p_list;
BEGIN
IF p_list IS NULL
OR p_list = '' THEN
RETURN;
END IF;
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;
RETURN;
END split;
3. 使用场景 我们经常使用in进行查询如 www.2cto.com
SELECT t.*
FROM stu t
WHERE t.useId IN ('12,23,34');
但是当查询的条数大于1000条时候就会报错。所以此时我们可以用上面的split进行查询
SELECT t.*
FROM stu t,
(SELECT column_voracle账号alue cv
FROM TABLE(CAST(split('12,23,45,66') AS type_split))) a
WHERE t.userId = a.cv
这其中,首先是将字符串'12,23,45,66'分割成四行,split('12,23,45,66')
然后,是把分割的值转换成 我们定义的分割类型type_split ;
cast(split('12,23,45,66') as type_split ) 这步貌似可以不用 然后,在table 下,转换成表。分割的字段名默认叫 column_value ;