`
wsql
  • 浏览: 11783429 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

递归用函数、存储过程实现的效果

 
阅读更多

--測試

<!-- [endif]-->

create table ta ( 项目 varchar ( 20), 上级项目 varchar ( 20), num int )

insert ta

select 'A' , '' , 100 union all

select 'B' , 'A' , 200 union all

select 'C' , 'B' , 300 union all

select 'D' , 'B' , 400 union all

select 'E' , 'C' , 500 union all

select 'F' , 'D' , 600 union all

select 'H' , 'E' , 700 union all

select 'G' , 'F' , 800

-- 如果要显示上级的项目 :

create function roy_f( @ 项目 varchar ( 20))

returns varchar ( 100)

as

begin

declare @ 上级项目 varchar ( 20)

select @ 上级项目 = 上级项目 from ta where 项目 = @ 项目

return case when @ 上级项目 is null then null

else isnull ( dbo. roy_f( @ 上级项目 )+ '-' , '' )+ @ 项目 end

end

-- 如果显示各级项目的汇总金额 :

create function roy_f2( @ 项目 varchar ( 20))

returns int

as

begin

declare @tb table ( 项目 varchar ( 20), 上级项目 varchar ( 20), num int , lev int )

declare @i int , @sum int

set @i= 0

insert @tb select *, @i from ta where 项目 = @ 项目

while @@rowcount > 0

begin

set @i= @i+ 1

insert @tb

select a.*, @i

from ta a, @tb b

where b. 项目 = a. 上级项目 and b. lev= @i- 1

end

select @sum= sum ( num) from @tb

return @sum

end

-- 测试 :

select 项目 , 金额 = dbo. roy_f2( 项目 ), 关系 = dbo. roy_f( 项目 ) from ta

/*

项目 金额 关系

-------------------- ----------- ---------------

A 3600 A

B 3500 A-B

C 1500 A-B-C

D 1800 A-B-D

E 1200 A-B-C-E

F 1400 A-B-D-F

H 700 A-B-C-E-H

G 800 A-B-D-F-G

(所影响的行数为 8 行)

*/

-- 用存储过程统计 :

create proc roy_p @ 项目 varchar ( 20)

as

begin

declare @i int

set @i= 0

select *, 级数 = @i into #

from ta where 项目 = @ 项目

while @@rowcount > 0

begin

set @i= @i+ 1

insert #

select ta.*, 级数 = @i

from ta, # b

where ta. 上级项目 = b. 项目

and b. 级数 = @i- 1

end

select [sum]= sum ( num) from #

end

-- 测试 :

exec roy_p 'A'

/*

sum

-----------

3600

(所影响的行数为 1 行)

*/

-- 删除测试 :

drop function roy_f, roy_f2

drop proc roy_p

drop table ta

分享到:
评论

相关推荐

    用python递归方式实现阶乘计算

    1、递归的特点 递归算法是一种直接或间接调用自身算法的过程,在计算机编程中,递归算法对解决一大类问题是...(4)在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储,递归次数过多容易造成栈溢出等。

    对存储函数递归的查询

    此函数是根据含有上下级关系的字段根据某个子级字段递归查询出所有符合条件的数据,通过此函数可以复用在整个项目中任何想调用的地方

    递归程序设计方法.pdf

    需要注意的是递归函数递归层次的深度决定所需存储量的⼤⼩。 3) 分析递归算法的⼯具是递归树,从递归树上可以得到递归函数的各种相关信息。例如:递归树的深度即为递归函数的递归深度;递归树上的结点数 ⽬恰为函数...

    MySQL实现递归查询的三种方式.rar

    MySQL递归查询 三种实现方式,方式一:使用自定义函数实现,方式二:纯SQL实现,方式三:适用于MySQL8及以上使用 WITH RECURSIVE实现

    java编写的递归与非递归

    对于递归算法,其重点是书写递归函数;而对于非递归使用栈或者队列实现。

    递归函数应用实例:用python来画分形树

    什么是递归函数 函数定义中调用函数自身的方式称为递归(简单说就是自己调用自己) 举个简单例子就是:函数f(x)—–f(f(x)) 既是一个递归调用。 每次函数调用时,函数参数会临时存储,相互没有影响;达到终止条件时...

    db2培训文档,语法、函数、存储过程、实例、聚集、递归等

    1、sql 简介 2.DB2 DML语言介绍 3.DB2语法 语法,实例 4.db2 常用函数介绍 5.db2 存储过程

    void reverse(char *source)实现字符串逆序,递归法

    从键盘输入字符串,用函数void reverse(char *source)通过递归法实现字符串逆序.

    php递归函数三种实现方法及如何实现数字累加

    本文列出了三种递归函数实现方法,第一种利用引用做参数,第二种利用全局变量,第三种利用静态变量,理解此类问题需要有点基础,包括对全局变量,引用,静态变量的理解,也需对他们的作用范围有所理解。在这不废话了...

    递归与分治算法的设计

    递归小结 •优点:结构清晰,可读性强,而且容易用...◦用递推来实现递归函数。 ◦通过Cooper变换、反演变换能将一些递归转化为尾递归,从而迭代求出结果。 后两种方法在时空复杂度上均有较大改善,但其适用范围有限。

    用函数实现模块化程序设计

    7.1为什么要用函数 7.2怎样定义函数 7.3调用函数 7.4对被调用函数的声明和函数原型 7.5函数的嵌套调用 7.6函数的递归调用 7.7数组作为函数参数 7.8局部变量和全局变量 7.9变量的存储方式和生存期 7.10 关于变量的...

    MySQL存储过程完整版使用代码示例

    资源包中囊括了MySQL数据库中的存储过程的使用包含的基本结构及日常所使用到的基本函数的使用【包括java端调用存储过程,创建临时表,动态执行sql语句,过程的递归调用,指针循环取数,批量创建表删除表,树状结构的...

    C++ 函数 函数的定义和函数原型 重载

    函数的定义和函数原型 函数调用和参数传递机制 函数重载 存储类别和作用域 递归函数设计和函数的递归调用 预处理指令

    SQLServer2000高级编程技术-已添加书签,想学存储过程、SQL编程务必要看,分析非常透彻

    11.11.4 使用存储过程、用户定义函数和视图来管理应用程序安全 11.11.5 使用一个代理用户来管理应用程序安全 11.11.6 使用应用程序角色来管理应用程序安全 11.12 小结 11.13 练习 第12章 SQL Server 2000中的XML支持...

    MySQL通过自定义函数实现递归查询父级ID或者子级ID

    这时就需要在MySQL中用存储过程(函数)来实现或者在程序中使用递归来实现。本文讨论在MySQL中使用函数来实现的方法: 一、环境准备 1、建表 CREATE TABLE `table_name` ( `id` int(11) NOT NULL AUTO_INCREMENT, `...

    二叉树的非递归操作(包括广义表建树、三种遍历方法、以及求节点等)

    用非递归方法做的关于二叉树的 一些操作,存储结构用的是三叉链表,不过主要还是二叉树的东西。

    建立二叉树,层序、先序遍历( 用递归或非递归的方法都可以)

    要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;

    数据库课后解答java第2章递归

    (1)什么是递归?递归程序有什么优缺点?...递归的缺点:在计算机中的执行过程比较复杂,需要用系统栈进行频繁的进出栈操作和转移操作,运 行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。

    杨辉三角的非递归c++实现

    因题目只是要求输出,所以没有必要用二维数组存储。考虑用一个一维数组来完成,即由前一行递推后一行。后一行的数据在前一行从后向前覆盖。因为输出要求为三角形,所以每一行的结果都要输出,这可以用一个输出函数...

    二叉树的创建及其遍历

     按先序遍历的扩展序列建立二叉树的二叉链表存储结构,实现二叉树先序、中序、后序遍历的递归算法,实现二叉树中序遍历的非递归算法,实现二叉树层次遍历的非递归算法(要求使用顺序队列,调用顺序队列基本操作...

Global site tag (gtag.js) - Google Analytics