oracle递归函数(关于oracle递归调用的自定义函数如何结束)

本文目录
- 关于oracle递归调用的自定义函数如何结束
- 求教oracle递归查询父子BOX
- 关于oracle递归的问题
- oracle里的递归查询怎么写
- ORACLE select 递归查询
- oracle中SQL递归查询
- oracle递归查询的prior怎么用
关于oracle递归调用的自定义函数如何结束
关于oracle递归调用的自定义函数如何结束
可以调用。 C语言最基本的模块为函数,任意函数都可以调用其它任意一个函数,包括函数本身。 1、自定义函数调用其它自定义函数的例子:《pre t="code" l="cpp"》#include 《stdio.h》
求教oracle递归查询父子BOX
CREATE TABLE test_tree (
test_id INT NOT NULL,
pid INT,
test_val VARCHAR(10),
PRIMARY KEY (test_id)
);
INSERT INTO test_tree VALUES(1, NULL, ’.NET’);
INSERT INTO test_tree VALUES(2, 1, ’C#’);
INSERT INTO test_tree VALUES(3, 1, ’J#’);
INSERT INTO test_tree VALUES(4, 1, ’ASP.NET’);
INSERT INTO test_tree VALUES(5, 1, ’VB.NET’);
INSERT INTO test_tree VALUES(6, NULL, ’J2EE’);
INSERT INTO test_tree VALUES(7, 6, ’EJB’);
INSERT INTO test_tree VALUES(8, 6, ’Servlet’);
INSERT INTO test_tree VALUES(9, 6, ’JSP’);
INSERT INTO test_tree VALUES(10, NULL, ’Database’);
INSERT INTO test_tree VALUES(11, 10, ’DB2’);
INSERT INTO test_tree VALUES(12, 10, ’MySQL’);
INSERT INTO test_tree VALUES(13, 10, ’Oracle’);
INSERT INTO test_tree VALUES(14, 10, ’SQL Server’);
INSERT INTO test_tree VALUES(15, 13, ’PL/SQL’);
INSERT INTO test_tree VALUES(16, 15, ’Function’);
INSERT INTO test_tree VALUES(17, 15, ’Procedure’);
INSERT INTO test_tree VALUES(18, 15, ’Package’);
INSERT INTO test_tree VALUES(19, 15, ’Cursor’);
INSERT INTO test_tree VALUES(20, 14, ’T-SQL’);
上面的 建表+测试数据
下面是查询 全路径的 SQL 语句
使用 START WITH CONNECT BY 语句实现树状查询
使用 SYS_CONNECT_BY_PATH 函数,获取节点的全路径.
COLUMN "FullPath" FORMAT A35
SELECT
LEVEL,
test_id,
test_val,
SYS_CONNECT_BY_PATH(test_val, ’\’) AS "FullPath"
FROM
test_tree
START WITH
test_id IN (1, 6, 10)
CONNECT BY PRIOR test_id = pid
ORDER SIBLINGS BY test_val;
LEVEL TEST_ID TEST_VAL FullPath
---------- ---------- -------------------- -----------------------------------
1 1 .NET \.NET
2 4 ASP.NET \.NET\ASP.NET
2 2 C# \.NET\C#
2 3 J# \.NET\J#
2 5 VB.NET \.NET\VB.NET
1 10 Database \Database
2 11 DB2 \Database\DB2
2 12 MySQL \Database\MySQL
2 13 Oracle \Database\Oracle
3 15 PL/SQL \Database\Oracle\PL/SQL
4 19 Cursor \Database\Oracle\PL/SQL\Cursor
LEVEL TEST_ID TEST_VAL FullPath
---------- ---------- -------------------- -----------------------------------
4 16 Function \Database\Oracle\PL/SQL\Function
4 18 Package \Database\Oracle\PL/SQL\Package
4 17 Procedure \Database\Oracle\PL/SQL\Procedure
2 14 SQL Server \Database\SQL Server
3 20 T-SQL \Database\SQL Server\T-SQL
1 6 J2EE \J2EE
2 7 EJB \J2EE\EJB
2 9 JSP \J2EE\JSP
2 8 Servlet \J2EE\Servlet
已选择20行。
关于oracle递归的问题
好像这个可以用分析函数吧。
你这个得到的结果是
ID P_ID QTY
A1 0
A2 A1 2
A3 A2 6
不应该就是你想要的吗?还是你想要别的结果但是我理解错了?
oracle里的递归查询怎么写
关键字:START WITH ... CONNECT BY PRIOR
select t.*,level from table_test t
start with p_id = ’3’
connect by p_id = prior s_id; --查询p_id为3的所有子孙id
select t.*,level from table_test t
start with p_id = ’3’
connect by prior p_id = s_id; --查询p_id为3的所有父辈id
ORACLE select 递归查询
START WITH 定义数据行查询的初始起点;
CONNECT BY prior 定义表中的各个行是如何联系的;
connect by 后面的"prior" 如果缺省,则只能查询到符合条件的起始行,并不进行递归查询;
条件2:col_1 = col_2,col_1是父键(它标识父),col_2是子键(它标识子)。
条件3过滤递归前相应节点及其子节点,如果上级节点不满足则下级节点自动过滤掉;
条件4过滤递归后相应的节点或子节点,如果上级节点不满足则下级结点自动提升一级。
系统伪列:
CURRVAL AND NEXTVAL 使用序列号的保留字
ROWID 记录的唯一标识
ROWNUM 限制查询结果集的数量
LEVEL显示层次树中特定行的层次或级别
CONNECT_BY_ROOT 返回当前层的根节点(当前行数据所对应的最高等级节点的内容)
SYS_CONNECT_BY_PATH(《column》, 《char》) 函数实现将从父节点到当前行内容以"path"或者层次元素列表的形式显示出来
CONNECT_BY_ISCYCLE 须带参数NOCYCLE,当前行中引用了某个父亲节点的内容并在树中出现了循环,如果循环显示"1",否则就显示"0"。
CONNECT_BY_ISLEAF 判断当前行是不是叶子。如果是叶子显示"1",如果不是叶子而是一个分支(例如当前内容是其他行的父亲)就显示"0"
而在 Oracle 10g 中,只要指定"NOCYCLE"就可以进行任意的查询操作。与这个关键字相关的还有一个伪列——CONNECT_BY_ISCYCLE, 如果在当前行中引用了某个父亲节点的内容并在树中出现了循环,那么该行的伪列中就会显示"1",否则就显示"0"。
【实例】
--创建测试表,增加测试数据
create table test(superid varchar2(20),id varchar2(20),mc varchar2(20));
insert into test values(’0’,’1’,’A1’);
insert into test values(’0’,’2’,’A2’);
insert into test values(’1’,’11’,’A11’);
insert into test values(’1’,’12’,’A12’);
insert into test values(’2’,’21’,’A21’);
insert into test values(’2’,’22’,’A22’);
insert into test values(’11’,’111’,’A111’);
insert into test values(’11’,’112’,’A112’);
insert into test values(’12’,’121’,’A121’);
insert into test values(’12’,’122’,’A122’);
insert into test values(’21’,’211’,’A211’);
insert into test values(’21’,’212’,’A212’);
insert into test values(’22’,’221’,’A221’);
insert into test values(’22’,’222’,’A222’);
commit;
--层次查询示例
select level||’级’ jc,lpad(’ ’,(level-1)*4)||id id,mc
from test
start with superid = ’0’ connect by prior id=superid;
select level||’级’ jc,connect_by_isleaf mxf,lpad(’ ’,(level-1)*4)||id id,mc
from test
start with superid = ’0’ connect by prior id=superid;
--给出两个以前在"数据库字符串分组相加之四"中的例子来理解start with ... connect by ...
--功能:实现按照superid分组,把id用";"连接起来
--实现:以下两个例子都是通过构造2个伪列来实现connect by连接的。
oracle中SQL递归查询
要看这个“下级人数”是怎么定义的,如果只是记录中PID值是父类ID的人数之和,那么就用with,先按PID做一个统计结果集,然后用原本数据表作为查询目标表,左外连接with的结果集,并将人数相加;
如果是要所有下级的人数之和,则需要要递归函数来计算人数。
oracle递归查询的prior怎么用
oracle树查询的最重要的就是select…start with…connect by…prior语法了。依托于该语法,我们可以将一个表形结构的数据以树的顺序列出来。
Oracle中树型查询的常用查询方式以及经常使用的与树查询相关的oracle特性函数等,在这里只涉及到一张表中的树查询方式而不涉及多表中的关联等。

更多文章:
太鼓达人hori鼓怎么拆底座?ipad3太鼓达人怎么解锁 怎么玩有很多歌曲的 太鼓达人 我的就7首歌 不要复制的要真实的可用的谢
2025年5月28日 01:10
小红伞卸载后,无法重新安装,注册表也无法删除?我装完小红伞,却怎么也卸不掉,求高人指点一下
2026年9月8日 17:00
交管12123怎么转人工客服电话(交管12123客服电话是多少交管12123怎么联系客服)
2026年4月17日 07:30
部落冲突电脑版怎么下载教程(《部落冲突破解版》怎么在电脑上下载)
2026年8月9日 22:50
俄乌冲突舆情分析(俄乌冲突的新变化,让西方似乎看到一丝战胜俄罗斯的希望)
2025年11月29日 18:00


















