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)
上一篇 2026年4月13日 下午1:45
下一篇 2026年4月13日 下午1:45


相关推荐

  • centos7.6安装oracle11g_centos7安装oracle11g

    centos7.6安装oracle11g_centos7安装oracle11g一Oracle安装前的准备1.1oracle11g下载地址:OracleDatabase11gRelease2(11.2.0.1.0)  Enterprise/StandardEditionforLinux(32-bit)http://download.oracle.com/otn/linux/oracle11g/R2/linux_11gR2_data

    2026年2月9日
    6
  • 克莱姆法则应用_克莱姆和克拉默法则

    克莱姆法则应用_克莱姆和克拉默法则克莱姆法则(由线性方程组的系数确定方程组解的表达式)是线性代数中一个关于求解线性方程组的定理,它适用于变量和方程数目相等的线性方程组。概念含有n个未知数的线性方程组称为n元线性方程组。1)当其右端的常数项b1,b2,…,bn不全为零时,称为非齐次线性方程组:其中,A是线性方程组的系数矩阵,X是由未知数组成的列向量,β是由常数项组成的列向量。非齐次线性方程组的矩阵形式:2)当常数项全为零…

    2025年11月3日
    5
  • java常考面试题

    java常考面试题

    2022年3月6日
    44
  • android 对比进度条,android进度条

    android 对比进度条,android进度条android 进度条 1 达到的效果 2 布局代码先写一个 my browser xml 文件存放 WebViewandro layout width fill parent android layout height fill parent android orientation vertical gt android id id webView android layout wid

    2026年3月26日
    2
  • 官网下载jdk要下载低版本的jdk总是找半天也找不到,怎么办[通俗易懂]

    官网下载jdk要下载低版本的jdk总是找半天也找不到,怎么办[通俗易懂]官网下载jdk要下载低版本的jdk总是找半天也找不到,怎么办

    2022年4月23日
    90
  • 门面模式详解

    门面模式详解门面模式门面模式 FacadePatter 又叫外观模式 提供了一个统一的接口 提供了一个统一的接口 用来访问子系统中的一群接口 其主要特征是定义了一个高层接口 让子系统更容易使用 属于结构性模式 其实 在我们日常的编码过程中 我们都在有意无意地大量使用门面模式 但凡只要高层模块需要调度多个子系统 2 个以上类对象 我们都会自觉地创建一个新类封装这些子系统 提供精密接口 让高层模块可以更加容易简介调用这些子系统的功能 尤其是现阶段各种第三方 SDK 各种块原类库 很大概率都会使用门面模式 尤其是你觉得

    2026年3月17日
    2

发表回复

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

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