--測試
<!-- [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
分享到:
相关推荐
1、递归的特点 递归算法是一种直接或间接调用自身算法的过程,在计算机编程中,递归算法对解决一大类问题是...(4)在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储,递归次数过多容易造成栈溢出等。
此函数是根据含有上下级关系的字段根据某个子级字段递归查询出所有符合条件的数据,通过此函数可以复用在整个项目中任何想调用的地方
需要注意的是递归函数递归层次的深度决定所需存储量的⼤⼩。 3) 分析递归算法的⼯具是递归树,从递归树上可以得到递归函数的各种相关信息。例如:递归树的深度即为递归函数的递归深度;递归树上的结点数 ⽬恰为函数...
MySQL递归查询 三种实现方式,方式一:使用自定义函数实现,方式二:纯SQL实现,方式三:适用于MySQL8及以上使用 WITH RECURSIVE实现
对于递归算法,其重点是书写递归函数;而对于非递归使用栈或者队列实现。
什么是递归函数 函数定义中调用函数自身的方式称为递归(简单说就是自己调用自己) 举个简单例子就是:函数f(x)—–f(f(x)) 既是一个递归调用。 每次函数调用时,函数参数会临时存储,相互没有影响;达到终止条件时...
1、sql 简介 2.DB2 DML语言介绍 3.DB2语法 语法,实例 4.db2 常用函数介绍 5.db2 存储过程
从键盘输入字符串,用函数void reverse(char *source)通过递归法实现字符串逆序.
本文列出了三种递归函数实现方法,第一种利用引用做参数,第二种利用全局变量,第三种利用静态变量,理解此类问题需要有点基础,包括对全局变量,引用,静态变量的理解,也需对他们的作用范围有所理解。在这不废话了...
递归小结 •优点:结构清晰,可读性强,而且容易用...◦用递推来实现递归函数。 ◦通过Cooper变换、反演变换能将一些递归转化为尾递归,从而迭代求出结果。 后两种方法在时空复杂度上均有较大改善,但其适用范围有限。
7.1为什么要用函数 7.2怎样定义函数 7.3调用函数 7.4对被调用函数的声明和函数原型 7.5函数的嵌套调用 7.6函数的递归调用 7.7数组作为函数参数 7.8局部变量和全局变量 7.9变量的存储方式和生存期 7.10 关于变量的...
资源包中囊括了MySQL数据库中的存储过程的使用包含的基本结构及日常所使用到的基本函数的使用【包括java端调用存储过程,创建临时表,动态执行sql语句,过程的递归调用,指针循环取数,批量创建表删除表,树状结构的...
函数的定义和函数原型 函数调用和参数传递机制 函数重载 存储类别和作用域 递归函数设计和函数的递归调用 预处理指令
11.11.4 使用存储过程、用户定义函数和视图来管理应用程序安全 11.11.5 使用一个代理用户来管理应用程序安全 11.11.6 使用应用程序角色来管理应用程序安全 11.12 小结 11.13 练习 第12章 SQL Server 2000中的XML支持...
这时就需要在MySQL中用存储过程(函数)来实现或者在程序中使用递归来实现。本文讨论在MySQL中使用函数来实现的方法: 一、环境准备 1、建表 CREATE TABLE `table_name` ( `id` int(11) NOT NULL AUTO_INCREMENT, `...
用非递归方法做的关于二叉树的 一些操作,存储结构用的是三叉链表,不过主要还是二叉树的东西。
要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;
(1)什么是递归?递归程序有什么优缺点?...递归的缺点:在计算机中的执行过程比较复杂,需要用系统栈进行频繁的进出栈操作和转移操作,运 行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。
因题目只是要求输出,所以没有必要用二维数组存储。考虑用一个一维数组来完成,即由前一行递推后一行。后一行的数据在前一行从后向前覆盖。因为输出要求为三角形,所以每一行的结果都要输出,这可以用一个输出函数...
按先序遍历的扩展序列建立二叉树的二叉链表存储结构,实现二叉树先序、中序、后序遍历的递归算法,实现二叉树中序遍历的非递归算法,实现二叉树层次遍历的非递归算法(要求使用顺序队列,调用顺序队列基本操作...