3,491
社区成员
发帖
与我相关
我的任务
分享
CREATE function [dbo].[fn_StringToTable]
(@str varchar(8000))
returns @Table table
(FieldName varchar(100))
begin declare @in_Index as int,
@strTemp as varchar(100)
set @in_Index = charindex(',',@str)
while (@in_Index > 0 or len(@str) > 0)
begin
if @in_Index > 0
begin
set @strTemp = rtrim(ltrim(Left(@str,@in_Index - 1)))
set @str = rtrim(ltrim(Right(@str,Len(@str)-@in_Index)))
end
else
begin
set @strTemp = @str
set @str = ''
end
insert @Table(FieldName)
values(@strTemp)
set @in_Index = charindex(',',@str)
end
return
end
GO
create or replace
type obj_StringToTable as object
(
FieldName varchar2(4000)
);
类型create or replace
function fn_StringToTable(str varchar2)
return t_table
as
rs t_table:= t_table();
begin
for rec IN (WITH A AS (SELECT str A FROM DUAL)
SELECT rownum as rn,DECODE(B,0,SUBSTR(A,C),SUBSTR(A,C,B-C)) as FieldName FROM
(
SELECT A,B,(LAG(B,1,0) OVER(ORDER BY LV))+1 C
FROM(
SELECT A,INSTR(A,',',1,LEVEL) B,LEVEL LV FROM A
CONNECT BY LEVEL <=(LENGTH(A) - LENGTH(REPLACE(A,',','')))+1
)
)) loop
rs.extend;
rs(rec.rn) := obj_StringToTable(rec.FieldName);
--rs(rs.count).name := rs(rs.count).name || 'xxxx';
end loop;
return rs;
end fn_StringToTable;
怕有人撞上同样问题,将弄出来的发一下create or replace
function fn_StringToTable
(:=str in varchar(4000))
return :=table1 table
(FieldName varchar(100))
begin
declare :=in_Index as int,
:=strTemp as varchar(100)
set :=in_Index = instr(',',:=str)
while (:=in_Index > 0 or length(:=str) > 0)
begin
if :=in_Index > 0
begin
set :=strTemp = rtrim(ltrim(Left(:=str,:=in_Index - 1)))
set @str = rtrim(ltrim(Right(:=str,Length(:=str)-:=in_Index)))
end
else
begin
set :=strTemp = :=str
set :=str = ''
end
insert :=Table1(FieldName)
values(:=strTemp)
set :=in_Index = instr(',',:=str)
end
return
end
GO
这是自己瞎改的没学过oracle到处都是错!!!