sql server函数转oracle 各位大神帮帮忙

caian12345 2013-09-05 07:27:09
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

...全文
106 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
caian12345 2013-09-10
  • 打赏
  • 举报
回复
create or replace 
type obj_StringToTable as object
(
  FieldName varchar2(4000)
);
类型
caian12345 2013-09-10
  • 打赏
  • 举报
回复
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;
怕有人撞上同样问题,将弄出来的发一下
caian12345 2013-09-05
  • 打赏
  • 举报
回复
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到处都是错!!!

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧