最近做了一次从SQL Server到Oracle的迁移使用SQL Oracle Server
迁移过去之后发现一个问题:
在SQL Server中写的一些函数返回的值是Table
而Oracle中不能直接返回Table
函数数量比较多,使用的地方也不少,如果全部重写工作量太大了,有没有简单点的办法
比如:SQL Server中将字符串按照某个特定字符拆分,返回拆分后形成的Table
ALTER FUNCTION f_splitSTR
(@s varchar(8000),--待分拆的字符串
@split varchar(10))--数据分隔符
RETURNS @re TABLE(col varchar(100))
AS
BEGIN
Declare @splitlen int
SET @splitlen = LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
Insert @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s = STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re Values(@s)
RETURN
end
类似这样的函数还有好多,有什么好的办法用做少的工作量能够完成它的功能呢?
新来的没多少分,见谅
迁移过去之后发现一个问题:
在SQL Server中写的一些函数返回的值是Table
而Oracle中不能直接返回Table
函数数量比较多,使用的地方也不少,如果全部重写工作量太大了,有没有简单点的办法
比如:SQL Server中将字符串按照某个特定字符拆分,返回拆分后形成的Table
ALTER FUNCTION f_splitSTR
(@s varchar(8000),--待分拆的字符串
@split varchar(10))--数据分隔符
RETURNS @re TABLE(col varchar(100))
AS
BEGIN
Declare @splitlen int
SET @splitlen = LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
Insert @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s = STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re Values(@s)
RETURN
end
类似这样的函数还有好多,有什么好的办法用做少的工作量能够完成它的功能呢?
新来的没多少分,见谅
oracle可以在PL/sQL中用表的类型,你查查手册