sql游标 递归
2010-03-30 15:23
127 查看
DUMP TRANSACTION 数据库名 WITH NO_LOG
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER FUNCTION dbo.GetSubBomCodeList(@BomCode varchar(50),@VersionNo int,@BomCodeList varchar(8000)='',@LevelCount int=-1)
RETURNS Varchar(8000)
AS
BEGIN
Declare @SubBomCode varchar(50),@SubBomVersionNo int,@StartLevel int
if @LevelCount=-1
begin
set @StartLevel=@@NESTLEVEL
set @LevelCount=@StartLevel
end
else
set @StartLevel=-1
DECLARE SubBomCode_Cursor CURSOR local FOR --定义游标
Select BomItem.SubBomCode,BomItem.SubBomVersionNo From BomItem where
isnull(SubBomCode,'')<>'' and BomItem.VersionNo = @VersionNo and BomCode = @BomCode
OPEN SubBomCode_Cursor
FETCH NEXT FROM SubBomCode_Cursor
INTO @SubBomCode,@SubBomVersionNo
WHILE @@FETCH_STATUS = 0 --循环游标,即循环当前类的弟一级子类
BEGIN
set @SubBomCode = LTrim(RTrim(@SubBomCode))
select @BomCodeList =
case when @BomCodeList <> '' then
case when charindex(@SubBomCode+'-'+cast(@SubBomVersionNo as varchar),@BomCodeList) > 0
then @BomCodeList
else @BomCodeList + ',''' + @SubBomCode + '-' + cast(@SubBomVersionNo as varchar) + ''''
end
else ''''+ @SubBomCode + '-' + cast(@SubBomVersionNo as varchar) + ''''
end
if @@NESTLEVEL<32
set @BomCodeList= dbo.GetSubBomCodeList(@SubBomCode,@SubBomVersionNo,@BomCodeList,@LevelCount) --递归。
else
set @BomCodeList= @BomCodeList + ',''' + @SubBomCode + '-' + cast(@SubBomVersionNo as varchar) + ''''
FETCH NEXT FROM SubBomCode_Cursor into @SubBomCode,@SubBomVersionNo
End
CLOSE SubBomCode_Cursor
DEALLOCATE SubBomCode_Cursor
Return @BomCodeList
END
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER FUNCTION dbo.GetSubBomCodeList(@BomCode varchar(50),@VersionNo int,@BomCodeList varchar(8000)='',@LevelCount int=-1)
RETURNS Varchar(8000)
AS
BEGIN
Declare @SubBomCode varchar(50),@SubBomVersionNo int,@StartLevel int
if @LevelCount=-1
begin
set @StartLevel=@@NESTLEVEL
set @LevelCount=@StartLevel
end
else
set @StartLevel=-1
DECLARE SubBomCode_Cursor CURSOR local FOR --定义游标
Select BomItem.SubBomCode,BomItem.SubBomVersionNo From BomItem where
isnull(SubBomCode,'')<>'' and BomItem.VersionNo = @VersionNo and BomCode = @BomCode
OPEN SubBomCode_Cursor
FETCH NEXT FROM SubBomCode_Cursor
INTO @SubBomCode,@SubBomVersionNo
WHILE @@FETCH_STATUS = 0 --循环游标,即循环当前类的弟一级子类
BEGIN
set @SubBomCode = LTrim(RTrim(@SubBomCode))
select @BomCodeList =
case when @BomCodeList <> '' then
case when charindex(@SubBomCode+'-'+cast(@SubBomVersionNo as varchar),@BomCodeList) > 0
then @BomCodeList
else @BomCodeList + ',''' + @SubBomCode + '-' + cast(@SubBomVersionNo as varchar) + ''''
end
else ''''+ @SubBomCode + '-' + cast(@SubBomVersionNo as varchar) + ''''
end
if @@NESTLEVEL<32
set @BomCodeList= dbo.GetSubBomCodeList(@SubBomCode,@SubBomVersionNo,@BomCodeList,@LevelCount) --递归。
else
set @BomCodeList= @BomCodeList + ',''' + @SubBomCode + '-' + cast(@SubBomVersionNo as varchar) + ''''
FETCH NEXT FROM SubBomCode_Cursor into @SubBomCode,@SubBomVersionNo
End
CLOSE SubBomCode_Cursor
DEALLOCATE SubBomCode_Cursor
Return @BomCodeList
END
相关文章推荐
- ORA-00604 递归 SQL 级别 1 出现错误,ORA-01000 超出打开游标的最大数
- 解决超出打开游标的最大数异常ORA-01000 递归SQL 级别1 出现错误 最全方案-最全方案
- 解决超出打开游标的最大数异常ORA-01000 递归SQL 级别1 出现错误 最全方案-最全方案
- ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数
- 解决超出打开游标的最大数异常ORA-01000 递归SQL 级别1 出现错误 最全方案-最全方案
- oralce数据库pde导入的时候,报错:递归sql级别1出现错误 超出打开游标的最大数
- ORA-00604 递归 SQL 级别 1 出现错误,ORA-01000 超出打开游标的...
- sql删除树节点 及其子节点的全部(存储过程,游标,递归)
- ORA-00604: 递归 SQL 级别 1 出现错误,ORA-01000: 超出打开游标的最大数
- ORA-00604: 递归 SQL 级别 1 出现错误,ORA-01000: 超出打开游标的最大数
- ORA-00604: 递归 SQL 级别 1 出现错误,ORA-01000: 超出打开游标的最大数
- 解决超出打开游标的最大数异常ORA-01000 递归SQL 级别1 出现错误 最全方案-最全方案
- ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数 ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数
- ORA-00604 递归 SQL 级别 1 出现错误,ORA-01000 超出打开游标的最大数
- sql中游标的使用
- SQL 游标的使用
- 在SQL中有没有办法,不通过游标,把一个列的字符全部连起来
- PL/SQL -->隐式游标(SQL%FOUND)
- SQL游标
- oracle pl/sql 入门+ 数组使用+游标+动态SQL