【问题标题】:How can I generate Oracle output based on Parent ID?如何根据父 ID 生成 Oracle 输出?
【发布时间】:2018-08-26 11:32:27
【问题描述】:

我的 Oracle 数据库如下所示:

DR_ID  |  DR_PATH    |  DR_FILE_OR_FOLDER  |  DR_PARENT_FOLDER_ID
---------------------------------------------------------------
  1    |  one.txt    |  File               |  0
  2    |  two        |  Folder             |  0
  3    |  three.txt  |  File               |  0
  4    |  four.txt   |  File               |  2
  5    |  five       |  Folder             |  2
  6    |  six        |  Folder             |  5
  7    |  seven.txt  |  File               |  6

此表表示文件夹结构,DR_ID 是带有序列的主键。 DR_PATH 是文件或文件夹名称,DR_FILE_OR_FOLDER 是类型(文件或文件夹),DR_PARENT_FOLDER_ID 表示父 ID (DR_ID)。

我需要创建一个查询来根据传递的DR_ID 获取文件夹文件的相对路径。

例子:- 如果我通过DR_ID 7,我需要得到two\five\six\seven.txt的输出

如何为这个需求创建查询?

【问题讨论】:

    标签: sql oracle oracle11g oracle10g


    【解决方案1】:

    这是一种选择:

    SQL> with test (dr_id, dr_path, dr_parent_folder_id) as
      2  (select 1, 'one.txt'  , 0 from dual union all
      3   select 2, 'two'      , 0 from dual union all
      4   select 3, 'three.txt', 0 from dual union all
      5   select 4, 'four.txt' , 2 from dual union all
      6   select 5, 'five'     , 2 from dual union all
      7   select 6, 'six'      , 5 from dual union all
      8   select 7, 'seven.txt', 6 from dual
      9  )
     10  select listagg(dr_path, '\') within group (order by level desc) result
     11  from test
     12  connect by dr_id = prior dr_parent_folder_id
     13  start with dr_id = &par_dr_id;
    Enter value for par_dr_id: 7
    
    RESULT
    --------------------------------------------------------------------------------
    two\five\six\seven.txt
    
    SQL> /
    Enter value for par_dr_id: 5
    
    RESULT
    --------------------------------------------------------------------------------
    two\five
    
    SQL>
    

    【讨论】:

    • 记录在数据库中是动态的,不能包含在查询中。所以期待一种通用的方法。
    • 这是什么意思?什么是“包含在查询中”?恐怕您不理解 CTE 或 WITH 因式分解子句。如果您自己发布了测试用例,我就不必自己动手来展示 SELECT 语句的作用。在我的示例中,您需要的是从第 10 行到第 13 行。
    • 是的,我是 Oracle 新手。我只需要在我的 C# 项目中执行 select 语句。你能只提供一个选择语句吗?
    • 第 10 - 13 行,正如我所说的。 &par_dr_id 代表一个参数。 &用在SQL*Plus中,其他工具用:,不知道C#用什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2011-10-24
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多