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,,SPLIT_IN,分隔符,缺省为,号
--说明:
--1.当SQL语句中涉及“IN(常量1, 常量2,…) ”⼦句时使⽤这种⽅式以便利⽤绑定变量。
oracle 字符串转数组--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)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论