`
winie
  • 浏览: 224264 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

一道数据库开发面试题

阅读更多

已知表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 的递归调用

分享到:
评论
1 楼 蔡华江 2010-03-18  
5.如果数据间引用不存在环路,还可以用递归查询来完成
如果出现环路用connect by nocycle

相关推荐

    企业公司软件测试面试笔试题集合 软件测试面试题

    清华同方开发的面试题 (有兴趣的看一下了 !).doc 缺陷的等级划分,一个经常被问到的问题.doc 软件测试工程师笔试试题(大集合).doc 软件测试工程师测试试题大集合(二)包括答案.doc 软件测试工程师试题发布版.doc...

    一道面试题引出的系列数据库性能,数据安全问题及解决方案.docx

    综上所述,通过遵循开发规范、优化数据结构和模型、使用合适的性能优化策略以及借助自动化工具,可以有效地解决面试题中提到的数据库性能和数据安全问题。同时,开发团队和DBA需要持续关注和改进这些方面,以确保...

    笔试面试题 一道面试题关于信息系统的问答和注意事项

    笔试面试题 一道面试题关于信息系统的问答和注意事项 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的...

    java的一些面试题

    Java面试题涵盖了许多核心知识点,包括基础技术、项目经验、逻辑推理和SQL查询。下面将对这些方面进行详细的解析。 1. **基础技术题** - **UML图**:UML(统一建模语言)有多种图表,包括类图、对象图、用例图、...

    今日头条2017 后台开发岗位面试题(1).pdf

    在今日头条2017年的后台开发岗位面试中,面试官主要关注的是候选人的项目经验、基础知识,特别是网络、数据库和算法方面的知识。以下是对这些面试题目的详细解析: 1. **算法题:输出二叉树从左边看过去能看到的...

    android和java面试大全集

    清华同方开发的面试题 (有兴趣的看一下了 !) 中软的面试题(转贴).doc 亚控科技比试题.doc 神州泰岳测试试题(笔试)转贴.doc 一家通讯公司的面试题目.doc 软件测试工程师试题发布版.doc 某公司的面试...

    暴雪面试题整理

    游戏行业涵盖开发、发行、运营等多个环节,涉及技术、艺术、市场和社区管理等领域。近年来,移动游戏、电子竞技、云游戏和虚拟现实等方向发展迅速,且全球化趋势明显。 【数组实现的栈和队列】 栈是一种后进先出...

    还在死记硬背面试题,面试官问我题的时候,我哭了,试试这一套,精心提炼核心重点内容简化实战应用面试宝典10秒钟搞定一道面试题!

    最新版Java面试宝典,精心提炼核心重点内容简化应用面试实战10秒一道,Java初级,高级,框架,底层原理,数据库,操作系统,微服务,IO,并发,JVM,容器,SpringBoot,SpringCloud,linx,面向对象,常用类,多线程,...

    全国各地 net /C#面试题

    2. 面试题:这个文件名可能代表一个包含所有面试题目的文档,可能以PDF、Word或Excel等格式存在,每一道题目可能都有详细的描述,涵盖C#语言基础、.NET框架、ASP.NET、ADO.NET、WPF、Windows服务、多线程、设计模式...

    47道MySQL数据库集群高频题整理(附答案背诵版)

    《47道MySQL数据库集群高频题整理(附答案背诵版).md》是一份专为数据库管理员、开发人员和数据工程师设计的学习资源,涵盖了MySQL数据库集群中最常见和高频的问题。通过系统地整理和解析每一道题目,这份资料旨在...

    开发面试题

    根据提供的文件信息,我们可以整理出一系列与开发相关的面试题及解答要点。下面将对每一道题目进行详细解析。 ### 题目一:Java水平定位 #### 题目描述: 1. Java水平定位。 2. 给定 `int a = 10`,计算经过以下...

    c#经典面试题

    【C#经典面试题——商品左右移动效果实现】 在C#面试中,有时会被要求解决实际的编程问题,比如设计一个商品左右移动效果的应用。这个题目来自南京为真网络技术有限公司的一道机试题,旨在考察候选人在数据库操作、...

    微软面试100题

    面试题1:水杯与玻璃杯的区别 在软件开发中,“水杯”与“玻璃杯”的类比,可以引申为抽象类与具体类的关系。抽象类定义了类的基本属性和方法,但不能实例化,而具体类则继承自抽象类,实现了抽象类中定义的所有...

    IT互联网名企经典面试题汇总:Java篇 (2).pdf

    对于开发者来说,熟悉这些面试题不仅有助于应对面试,也能提升自身的专业技能,因为这些题目覆盖了软件开发中的关键领域。在准备面试时,深入理解这些概念、熟练掌握相关技术,并结合实际项目经验,将大大增加成功的...

    .net面试题.docx

    《.NET面试题详解》 在.NET面试中,掌握核心知识点是至关重要的。以下是对一些常见面试题的详细解析: 1. **不使用第三方变量交换a、b的值**: 这是一道常见的编程题,可以使用异或操作来实现: ```csharp a = ...

    前端大厂最新面试题-isCompleteBinaryTree.docx

    判断一个二叉树是否是完全二叉树是前端开发中的一道常见面试题。 前端大厂最新面试题-isCompleteBinaryTree.docx文件提供了一种判断是否是完全二叉树的代码实现。该代码使用队列来遍历二叉树,并检查树的每个节点...

    20道面试题的Java框架和库的集锦

    每一道面试题都是对这些技术点的深入挖掘,解析部分则提供了详细的学习路径和思路,使得读者能够在掌握基础的同时,对细节有更加深入的理解。无论你是准备参加面试的求职者,还是希望巩固技术基础的在职开发者,这些...

    最新各大公司企业真实面试题-武汉东之林科技有限公司机试

    根据给定文件的信息,我们...综上所述,这份面试题覆盖了数据库查询、表操作、C# 编程以及 ASP.NET 页面开发等多个方面,对于应聘者来说,不仅需要具备扎实的理论基础,还需要有一定的实践经验才能较好地完成这些题目。

    最热考的java面试题

    - 同时给出了一道选择题,要求选出有效的内部类声明。 - 选项 **C** 和 **E** 是正确的: - **C**: 内部类可以访问外部类的私有成员变量 `d1`。 - **E**: 抽象内部类可以不提供方法实现。 ### 7. Java ...

Global site tag (gtag.js) - Google Analytics