已知表route,字段和内容如下:
起始节点
终止节点
距离
a |
b |
100 |
a |
c |
150 |
a |
d |
200 |
b |
e |
300 |
b |
f |
800 |
e |
g |
100 |
要求写sql或者一段代码,找出从节点a开始能到达的所有终点节点(包括间接到达).
1.创建表route,插入数据
CREATE TABLE route (
begin_node VARCHAR2(3),
end_node VARCHAR2(3),
distance NUMBER(4));
INSERT INTO route VALUES('a','b',100);
INSERT INTO route VALUES('a','c',150);
INSERT INTO route VALUES('a','d',200);
INSERT INTO route VALUES('b','e',300);
INSERT INTO route VALUES('b','f',800);
INSERT INTO route VALUES('e','b',100);
2.创建字符串数组类型
CREATE OR REPLACE TYPE t_string_array IS TABLE OF VARCHAR2(10);
3.创建函数,在字符串数组中查找指定的字符串
CREATE OR REPLACE FUNCTION FindInStringArray(src t_string_array, dest VARCHAR2)
RETURN BOOLEAN
IS
i NUMBER(4);
BEGIN
FOR i in 1..src.COUNT LOOP
IF src(i)=dest THEN
RETURN TRUE;
END IF;
END LOOP;
RETURN FALSE;
END;
4.PL/SQL
DECLARE
v_begin_node VARCHAR2(3);
v_end_node VARCHAR2(3);
CURSOR c_route IS SELECT end_node FROM route WHERE begin_node=v_begin_node;
--已经搜索到的途经的节点集合
searchedNodes t_string_array := t_string_array('a');
--节点集合中将要处理的位置
index0 NUMBER(5) := 1;
BEGIN
--遍历途经的每一个点
WHILE index0 <= searchedNodes.COUNT LOOP
--当前要处理的节点
v_begin_node := searchedNodes(index0);
--当前节点可直接通往的节点
OPEN c_route;
LOOP
FETCH c_route INTO v_end_node;
EXIT WHEN c_route%NOTFOUND;
IF NOT FindInStringArray(searchedNodes, v_end_node) THEN
--这是一个未在集合中出现过的新节点,增加到集合
searchedNodes.EXTEND(1);
searchedNodes(searchedNodes.COUNT) := v_end_node;
--输出
DBMS_OUTPUT.PUT_LINE(v_end_node);
END IF;
END LOOP;
CLOSE c_route;
--集合中的下一元素
index0:=index0 + 1;
END LOOP;
END;
5.如果数据间引用不存在环路,还可以用递归查询来完成
SELECT end_node FROM route
CONNECT BY begin_node=PRIOR end_node
START WITH begin_node='a'
6.如果要打印出从a开始的遍历路径,该怎么办呢?
PL/SQL
的递归调用
分享到:
相关推荐
清华同方开发的面试题 (有兴趣的看一下了 !).doc 缺陷的等级划分,一个经常被问到的问题.doc 软件测试工程师笔试试题(大集合).doc 软件测试工程师测试试题大集合(二)包括答案.doc 软件测试工程师试题发布版.doc...
综上所述,通过遵循开发规范、优化数据结构和模型、使用合适的性能优化策略以及借助自动化工具,可以有效地解决面试题中提到的数据库性能和数据安全问题。同时,开发团队和DBA需要持续关注和改进这些方面,以确保...
笔试面试题 一道面试题关于信息系统的问答和注意事项 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的...
Java面试题涵盖了许多核心知识点,包括基础技术、项目经验、逻辑推理和SQL查询。下面将对这些方面进行详细的解析。 1. **基础技术题** - **UML图**:UML(统一建模语言)有多种图表,包括类图、对象图、用例图、...
在今日头条2017年的后台开发岗位面试中,面试官主要关注的是候选人的项目经验、基础知识,特别是网络、数据库和算法方面的知识。以下是对这些面试题目的详细解析: 1. **算法题:输出二叉树从左边看过去能看到的...
清华同方开发的面试题 (有兴趣的看一下了 !) 中软的面试题(转贴).doc 亚控科技比试题.doc 神州泰岳测试试题(笔试)转贴.doc 一家通讯公司的面试题目.doc 软件测试工程师试题发布版.doc 某公司的面试...
游戏行业涵盖开发、发行、运营等多个环节,涉及技术、艺术、市场和社区管理等领域。近年来,移动游戏、电子竞技、云游戏和虚拟现实等方向发展迅速,且全球化趋势明显。 【数组实现的栈和队列】 栈是一种后进先出...
最新版Java面试宝典,精心提炼核心重点内容简化应用面试实战10秒一道,Java初级,高级,框架,底层原理,数据库,操作系统,微服务,IO,并发,JVM,容器,SpringBoot,SpringCloud,linx,面向对象,常用类,多线程,...
2. 面试题:这个文件名可能代表一个包含所有面试题目的文档,可能以PDF、Word或Excel等格式存在,每一道题目可能都有详细的描述,涵盖C#语言基础、.NET框架、ASP.NET、ADO.NET、WPF、Windows服务、多线程、设计模式...
《47道MySQL数据库集群高频题整理(附答案背诵版).md》是一份专为数据库管理员、开发人员和数据工程师设计的学习资源,涵盖了MySQL数据库集群中最常见和高频的问题。通过系统地整理和解析每一道题目,这份资料旨在...
根据提供的文件信息,我们可以整理出一系列与开发相关的面试题及解答要点。下面将对每一道题目进行详细解析。 ### 题目一:Java水平定位 #### 题目描述: 1. Java水平定位。 2. 给定 `int a = 10`,计算经过以下...
【C#经典面试题——商品左右移动效果实现】 在C#面试中,有时会被要求解决实际的编程问题,比如设计一个商品左右移动效果的应用。这个题目来自南京为真网络技术有限公司的一道机试题,旨在考察候选人在数据库操作、...
面试题1:水杯与玻璃杯的区别 在软件开发中,“水杯”与“玻璃杯”的类比,可以引申为抽象类与具体类的关系。抽象类定义了类的基本属性和方法,但不能实例化,而具体类则继承自抽象类,实现了抽象类中定义的所有...
对于开发者来说,熟悉这些面试题不仅有助于应对面试,也能提升自身的专业技能,因为这些题目覆盖了软件开发中的关键领域。在准备面试时,深入理解这些概念、熟练掌握相关技术,并结合实际项目经验,将大大增加成功的...
《.NET面试题详解》 在.NET面试中,掌握核心知识点是至关重要的。以下是对一些常见面试题的详细解析: 1. **不使用第三方变量交换a、b的值**: 这是一道常见的编程题,可以使用异或操作来实现: ```csharp a = ...
判断一个二叉树是否是完全二叉树是前端开发中的一道常见面试题。 前端大厂最新面试题-isCompleteBinaryTree.docx文件提供了一种判断是否是完全二叉树的代码实现。该代码使用队列来遍历二叉树,并检查树的每个节点...
根据给定文件的信息,我们...综上所述,这份面试题覆盖了数据库查询、表操作、C# 编程以及 ASP.NET 页面开发等多个方面,对于应聘者来说,不仅需要具备扎实的理论基础,还需要有一定的实践经验才能较好地完成这些题目。
- 同时给出了一道选择题,要求选出有效的内部类声明。 - 选项 **C** 和 **E** 是正确的: - **C**: 内部类可以访问外部类的私有成员变量 `d1`。 - **E**: 抽象内部类可以不提供方法实现。 ### 7. Java ...
系统测试则是将整个软件系统作为一个整体进行测试,包括对硬件、软件、网络、数据库等所有组成部分的全面测试,以确保系统能够按照需求规格说明书的规定正常运行。系统测试关注的是整个系统的功能、性能、兼容性、...