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中我们可以通过命令来启动和关闭端口,那么具体是哪个命令呢?下面由学习啦小编为大家整理了linux关闭端口的相关命令,希望对大家有所帮助。linux关闭端口命令前提:首先你必须知道,端口不是独立存在的,它是依附于进程的。某个进程开启,那么它对应的端口就开启了,进程关闭,则该端口也就关闭了。下次若某个进程再次开启,则相应的端口也再次开启。而不要纯粹的理解为关闭掉某个端口,不过可以禁用某个端…

    2022年7月20日
    43
  • DEDECMS开启邮箱验证通知的解决方法

    DEDECMS开启邮箱验证通知的解决方法

    2021年9月25日
    40
  • 收音机fm和am的区别是什么_FM收音机

    收音机fm和am的区别是什么_FM收音机1、频率区别FM=FrequencyModulation调频,微波;微波传输,信号质量高,传输成本低,发射功率小,覆盖范围小,受地理因素影响较大,一般作为城市广播的首选。比如你的家乡城市台,

    2022年8月6日
    4
  • java getmapping(_@getMapping与@postMapping详解「建议收藏」

    首先要了解一下@RequestMapping注解。@RequestMapping用于映射url到控制器类的一个特定处理程序方法。可用于方法或者类上面。也就是可以通过url找到对应的方法。@RequestMapping有8个属性。value:指定请求的实际地址。method:指定请求的method类型(GET,POST,PUT,DELETE)等。consumes:指定处理请求的提交内容类型(Cont…

    2022年4月9日
    342
  • C++矩阵转置「建议收藏」

    C++矩阵转置「建议收藏」C++矩阵转置

    2022年6月24日
    24
  • Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]

    Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]随着大数据、人工智能的兴起,Python被带到了一个新的高度,但在使用Python过程中,很多人没搞清楚Python环境究竟是什么。当开发工程的时候,往往因为python环境的问题搞得一团糟。本文旨在说清楚什么是Python环境,什么是Python虚拟环境,并希望通过本文的学习掌握常用的Python环境管理工具的使用。

    2022年8月27日
    5

发表回复

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

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