Oracle 字符串转表

创建自定义类型:
CREATE OR REPLACE TYPE "T_STRLIST" as Table of Varchar2(4000)

建转换方法:
CREATE OR REPLACE Function fun_Str2list
(
Str_In In Varchar2,
Split_In In Varchar2 := ','
) Return t_Strlist
Pipelined As
v_Str Long;
P Number;
--功能:将由逗号分隔的不带引号的字符序列转换为单列数据表
--参数:STR_IN,如:G0000123,G0000124,G0000125...,SPLIT_IN,分隔符,缺省为,号
--说明:
--1.当SQL语句中涉及“IN(常量1, 常量2,…) ”子句时使用这种方式以便利用绑定变量。
--2.使用这两个函数时,需要在SQL语句中加入“/+ cardinality(b 3)/”提示,因为CBO下临时内存表没有统计数据,。
--3.两种调用示例
--SELECT /+ cardinality(b 3)/ * FROM 门诊费用记录 WHERE NO IN (SELECT * FROM TABLE(F_STR2LIST('A01,A02,A03')) B);
--SELECT /+ cardinality(b 3)/ A.* FROM 门诊费用记录 A, TABLE(F_STR2LIST('A01,A02,A03')) B WHERE A.NO = B.COLUMN_VALUE;
Begin
If Str_In Is Null Then
Return;
End If;
v_Str := Str_In || Split_In;
Loop
P := Instr(v_Str, Split_In);
Exit When(Nvl(P, 0) = 0);
Pipe Row(Substr(v_Str, 1, P - 1));
v_Str := Substr(v_Str, P + 1);
End Loop;
Return;
End;

使用:
Select Column_Value As 值 From Table (Select fun_Str2list('111|222|333', '|') From Dual)

posted @ 2021-06-22 18:10  Elcser  阅读(752)  评论(0编辑  收藏  举报