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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是静态代理和动态代理_静态ip和动态ip有什么区别

    什么是静态代理和动态代理_静态ip和动态ip有什么区别动态代理和静态代理到底有什么区别,好处在哪里?

    2025年11月10日
    6
  • 开源视频会议BigBlueButton 0.81二次开发API

    开源视频会议BigBlueButton 0.81二次开发API开源视频会议BigBlueButton0.81二次开发API本文是copy一位博友的,为了不丢失这篇文章,谢谢。BigBlueButton是一个视频会议软件,它的演示环境和开发环境的搭建,网上都有很多的资料,为了便于二次开发,我整理了一下BBB的常用功能API接口,供参考:BigblueButton调用API,只需一个HTTP请求一个URL,查询参数提供呼叫所需要的信

    2022年7月14日
    29
  • jax ws ri 生成java类_基于SOAP的webservice(1)、JAX-WS实现

    jax ws ri 生成java类_基于SOAP的webservice(1)、JAX-WS实现因为工作中使用了SOAP进行两个系统的接口调用,所以私下学习一下两种实现,粗略记录于此。本文侧重于实际实现操作,而不是理论原理。个人简单理解:SOAP(SimpleObjectAccessProtocol简单对象访问协议)是基于XML和HTTP的用于实现网络连通的程序之间远程调用的协议(但是SOAP1.2中也可以使用非HTTP协议进行传输)。两个通过网络连接的程序体,通过一定规范的XML进…

    2022年7月15日
    32
  • intellij idea安装教程_intellij idea2021安装教程

    intellij idea安装教程_intellij idea2021安装教程下载第一步:打开官网:http://www.jetbrains.com/idea/,点击页面中的“DOWNLOAD”第二步:根据自己的需要选择下载的IntelliJIDEA版本。Communit

    2022年8月4日
    6
  • shell中的if判断语句怎么写_shell编程if语句格式

    shell中的if判断语句怎么写_shell编程if语句格式文章目录1.判断语句介绍-if2.if…else语句(一个条件两个判断结果)3.if…elif…else语句(多条件多个判断结果)4.if嵌套if语句5.if和命令的操作1.判断语句介绍-if当编写程序时,需要对上一步执行代码是否执行成功进行判断,可以用if语句进行判断。通过查看if语句执行的判断结果查看代码是否执行成功当满足条件的代码块中有exit,表示退出脚本执行注意:注意if和[]有空格,[]和condition也有空格隔开,运算符也有空格。缩进可以任意缩进单

    2022年8月18日
    9
  • Oracle Sqlplus 运行环境 login.sql 设置[通俗易懂]

    Oracle Sqlplus 运行环境 login.sql 设置[通俗易懂]在运行Sqlplus时经常需要对运行环境进行设置,如果每次输入都要调整参数会比较麻烦,因此可以利用Oracle提供的glogin.sql、login.sql这两个文件对Sqlplus进行环境初始化。

    2022年7月16日
    21

发表回复

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

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