oracle存储过程递归调用_函数的间接递归调用

oracle存储过程递归调用_函数的间接递归调用存储过程和函数一样也可以递归调用,调用方法类似。如下是求某个数以内的数字求和:CREATEPROCEDUREaProc_Test@INPUTint,@SumintoutputASBEGINSETNOCOUNTON;if(@Sumisnull) set@Sum=0if(@INPUT>0)begin …

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

存储过程和函数一样也可以递归调用,调用方法类似。如下是求某个数以内的数字求和:

CREATE PROCEDURE aProc_Test
    @INPUT int,
    @Sum int output
AS
BEGIN
    SET NOCOUNT ON;
    if(@Sum is null)
		set @Sum=0
    if(@INPUT>0)
    begin
		set @INPUT=@INPUT-1
		set @Sum=@Sum+@INPUT
		EXEC aProc_Test @INPUT,@Sum output 
	end
END
GO

--调用存储过程,对1~10的数字求和
DECLARE @OUT int,@output int
EXEC aProc_Test 11,@output output
SELECT [OUTPUT值]=@output
go

输出结果:

oracle存储过程递归调用_函数的间接递归调用

注意:递归存储过程一般会用到 output 或 return,两者返回值类型上有一定的区别,output 基本上没有限制,但 return 返回的一般是 int 类型。

下面是审核流中根据某一个节点查询下一个节点,就是用的 return 实现

CREATE PROCEDURE [dbo].[up_Flow_JudegNextStep]
	@StepId int,
	@FRId int,
	@PosId int
AS
BEGIN
	SET NOCOUNT ON;
	declare @SRId int;
	select @SRId = SRId from FL_FlowStep where StepId = @StepId;
	--插入当前步骤
	exec up_Flow_AddPath @FRId = @FRId, @StepId = @StepId, @SRId = @SRId, @ObjId = @PosId;
	
	--处理分支
	declare judgeCursor Cursor For
	select FLDField,Operator,Value,NextStep from FL_FlowStepJudge a left join FL_FlowFormField b
	on a.FLDId = b.FLDId where StepId = @StepId;
	open judgeCursor;
	
	declare @field varchar(10),@Operator varchar(10),@value varchar(10), @next int;
	fetch next from judgeCursor into @field,@Operator,@value,@next;
	while(@@FETCH_STATUS=0)
	begin
		declare @sql nvarchar(100);
		declare @has int;
		set @sql = 'select @a = count(1) from FL_FlowData where FRId='+CAST(@FRId as varchar(10))+' and '+@field+@Operator+''''+@value+'''';
		exec sp_executesql @sql,N'@a int output',@has output;
		if @has > 0
		begin
			close judgeCursor;
			deallocate judgeCursor;
			if @next > 0
			begin
				exec up_Flow_JudegNextStep @StepId=@next,@FRId=@FRId,@PosId=@PosId;
			end
			return 1;
		end
		fetch next from judgeCursor into @field,@Operator,@value,@next;
	end
	close judgeCursor;
	deallocate judgeCursor;
	return 0;
	--处理分支结束
END

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189586.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 磁盘阵列怎么组linux系统,Linux系统下如何设置磁盘阵列?

    磁盘阵列怎么组linux系统,Linux系统下如何设置磁盘阵列?在Linux系统中,磁盘阵列主要通过/etc/raidtab配置文件来控制的。若系统管理员需要实现磁盘阵列的话,就需要手工创建这个配置文件。或者从其他地方复制这个文件,并进行相应的修改。默认情况下,在Linux系统中不会有这个文件。下面笔者就对这个文件中的主要参数进行讲解,帮助大家建立一个正确的磁盘阵列配置文件。参数一:raid-level指定磁盘阵列的类型。  磁盘阵列到目前为止,有不下于十种…

    2022年5月18日
    44
  • C++ 中的getline()函数用法详解

    C++ 中的getline()函数用法详解    遇到了要输入一行字符串的操作,我想除了fgets()的方法(fgets()用法链接),getline()也是可以的,但是我对getline的操作不熟悉,便查阅了很多资料,发现都说的很模糊,借这个机会我想彻底理清楚getline的用法;  网上有说getline有两种用法的,我在这总结一下,一、getline()用的比较多的用法 1) istrea…

    2025年6月1日
    0
  • 已知网关,子网掩码,算IP地址段_ip地址子网掩码网关怎么计算

    已知网关,子网掩码,算IP地址段_ip地址子网掩码网关怎么计算首先要铺垫一些基础知识,整个互联网就是一个单一的、抽象的网络。IP地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32位的标识符。注意,每个IP地址都是独一无二的,就像人的身份证号码一样。而IP地址又分为A类、B类、C类、D类和E类地址,其中我们常用的是A、B、C三类,它们是单播地址(一对一通信),每一类地址都由两个固定长度的字段组成,其中第一个字段是

    2022年10月23日
    0
  • 加壳工具的使用

    加壳工具的使用加壳工具的使用0x01前言0x01加壳简介0x02ASPack加壳0x03PE-Armor加壳0x01前言这是我对加壳工具的使用的学习记录。0x01加壳简介1.加壳:是一种通过一系列数学运算,将可执行程序文件(EXE)或动态链接库文件(DLL)的编码进行改变(目前加壳软件还可以压缩、加密),以达到缩小文件体积或加密程序编码的目的。当被加壳的程序运行时,外壳程序先被执行,然后由这…

    2022年6月27日
    28
  • Oracle没有WM_CONCAT函数的解决办法

    Oracle没有WM_CONCAT函数的解决办法解决ORA-00904:”WMSYS”.”WM_CONCAT”WM_CONCAT是oracle的非公开函数,并不鼓励使用,新版本oracle并没有带此函数,需要手工加上。1、下载根据下方链接下载三个文件:owmctab.plb、owmaggrs.plb、owmaggrb.plbhttps://download.csdn.net/download/qq_39997939/741429102、执行用sqlplus登录,执行下载的脚本sqlplus/assysdba

    2022年6月14日
    89
  • Gridview导出为Excel

    Gridview导出为Excel1.由于gridview的内容可能是分页显示的,因此,这里在每次导出excel时,先将gridview的allowpaging属性设置为false,然后databind()一下,确保搂到所有数据;2.

    2022年7月3日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号