-- 创建模块表 create table module ( sid number(10) not null, module_name varchar2(20) not null, pid number(10) );
-- 插入数据 insert into module(sid, module_name, pid) values (1, '模块1', null); insert into module(sid, module_name, pid) values (2, '模块2', null); insert into module(sid, module_name, pid) values (3, '模块3', null); insert into module(sid, module_name, pid) values (4, '模块21', 2); insert into module(sid, module_name, pid) values (5, '模块31', 3); insert into module(sid, module_name, pid) values (6, '模块211', 4); insert into module(sid, module_name, pid) values (7, '模块11', 1); insert into module(sid, module_name, pid) values (8, '模块111', 7); insert into module(sid, pid, module_name) values(9, 3, '模块32');
-- 从头节点开始递归遍历 with tree(sid, pid, name) as ( select m.sid, m.pid, m.module_name from module m where m.pid is null union all select m2.sid, m2.pid, m2.module_name from tree inner join module m2 on tree.sid = m2.pid ) select * from tree order by sid;
-- 从指定节点开始递归遍历 with tree(sid, pid, name) as ( select m.sid, m.pid, m.module_name from module m where m.sid = 2 union all select m2.sid, m2.pid, m2.module_name from tree inner join module m2 on tree.sid = m2.pid ) select * from tree order by sid;
-- 从叶节点开始方向递归遍历,注意distinct with tree(sid, pid, name) as ( select m.sid, m.pid, m.module_name from module m where m.sid in (5,6,8, 9) union all select distinct m2.sid, m2.pid, m2.module_name from tree inner join module m2 on tree.pid = m2.sid ) select * from tree order by sid;
-- 查询指定层级上的节点,先要遍历全部 with tree(sid, pid, name, level) as ( select m.sid, m.pid, m.module_name, 0 from module m where m.pid is null union all select m2.sid, m2.pid, m2.module_name, tree.level + 1 from tree inner join module m2 on tree.sid = m2.pid ) select * from tree where level = 1 order by sid;
-- 注意with as...后只支持select语句,不支持如下级联删除 with tree(sid, pid, name) as ( select m.sid, m.pid, m.module_name from module m where m.sid = 2 union all select m2.sid, m2.pid, m2.module_name from tree inner join module m2 on tree.sid = m2.pid ) delete from module where sid in (select sid from tree);
相关推荐
3. 数据库兼容性:不同的数据库可能有不同的递归查询语法,需要根据实际使用的数据库选择合适的实现方式。 总之,理解和掌握递归查询是数据库设计中的重要技能,合理运用能极大地提升数据操作的效率和便利性。通过`...
4. `递归下降语法分析.ncb`:这是Visual Studio的非编译数据库文件,用于加速IDE的编译和调试过程。 5. `递归下降语法分析.opt`:存储用户特定的项目选项和设置。 6. `递归下降语法分析.plg`:可能记录了项目的编译...
递归下降语法分析器设计与实现 递归下降语法分析是一种常用的语法分析方法,它的核心思想是将文法中的每个非终结符编写一个函数,每个函数的功能是识别由该终结符所表示的语法成分。这种分析法要求文法是LL(1)的,...
本文将深入探讨“带数据库的递归经典树形菜单”这一主题,结合给定的文件内容,包括如何实现递归,构建树形结构,以及如何通过SQL语句来管理和操作数据。 首先,我们要理解“递归”这一概念。在编程中,递归是一种...
根据给定的文件信息,我们可以深入探讨“编译原理中的递归下降语法分析器”的相关知识点,这在编译器设计与实现中占有极其重要的地位。 ### 编译原理概览 编译原理是计算机科学的一个核心领域,涉及到将源代码...
递归下降语法分析器是编译原理中的一个重要概念,它是一种自顶向下的解析方法,主要用于解析源代码,将源程序转化为抽象语法树(AST)。这种方法依赖于一系列互相递归的函数来匹配输入的词法符号,从而实现对源代码...
中国矿业大学编译原理实践课程,C语言编译器之递归下降语法分析器
本实验报告聚焦于递归下降语法分析,这是一种自顶向下的解析方法,通过一系列递归函数来实现对输入字符串的解析。 实验的目的在于让学生深入理解递归下降语法分析的工作原理,以及如何构建针对特定上下文无关文法的...
在编译原理中,递归下降语法分析程序是一种基于自顶向下分析方法的解析技术,它主要用于理解程序源代码的结构并将其转化为抽象语法树(AST)。本资源包含了一个递归下降语法分析程序的实现,以及相关的说明文档,...
在计算机科学领域,语法分析是编译器设计的关键部分,其中递归下降语法分析器是一种常用的解析技术。本文将深入探讨递归下降语法分析器的原理、实现方式以及其在编程语言处理中的应用。 首先,我们需要理解什么是...
算术表达式文法的递归下降语法分析程序 本文将对算术表达式文法的递归下降语法分析程序进行详细的知识点总结。 1. 算术表达式文法 算术表达式文法是指对算术表达式的语法规则的描述。该文法定义了算术表达式的...
用java语言编写的递归下降语法分析器用java语言编写的递归下降语法分析器用java语言编写的递归下降语法分析器
设计递归下降翻译器,完成语法分析和中间代码翻译。 输入:一个完整的源程序 输出:与输入对应的一个语法树、四元式序列 2、资源 课设报告word 课设源码 3、开发环境 编程语言:C++ IDE:VS 2019
在数据库系统中,词法语法分析是解析查询语句的第一步,对于理解用户输入的SQL命令至关重要。本Demo旨在为初学者提供一个学习数据库词法语法分析的实例,帮助他们更好地理解和应用相关知识。 词法分析,也称为扫描...
递归下降语法分析是一种常见的自顶向下的语法分析方法,其原理和实现是本次实验的核心内容。 递归下降分析方法基于程序的函数调用机制,通过定义一系列的解析函数来对应文法的每个非终结符。当遇到输入串的起始符号...
本示例中的“递归循环读取省市区json文件数据,并保存到数据库中”是一个全面的教程,它涵盖了从JSON解析到数据库交互的关键技术。以下是这个过程涉及的主要知识点: 1. **JSON (JavaScript Object Notation)**:...
"Java递归树型结构通用数据库" Java递归树型结构通用数据库是指使用Java语言实现的递归树型结构数据库系统,该系统可以实现树型结构的部门管理,包括部门的添加、删除、修改和查询等操作。 知识点: 1. 递归树型...
实现一个递归下降语法分析程序,识别用户输入的算术表达式。 二、实验主要内容 1、文法如下: E®TE` E’®+TE’|-TE’|e T®FT` T’®*FT’|/FT’|e F®(E)|i 2、求取各非终结符的First及Follow集合 3、编程...