加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 使用递归从查询中的一个表中获取几个resut

发布时间:2021-01-25 21:27:47 所属栏目:站长百科 来源:网络整理
导读:我想在递归查询中执行此操作.我尽力使问题清楚如果你有任何问题很快得到答案 我有4个测试程序:PRC_TEST1,PRC_TEST2,PRC_TEST3,prc_test4 在PRC_TEST1内部,它正在执行PRC_TEST2 …并且PRC_TEST2正在执行prc_test3.并且prc_test3正在执行prc_test4 create or

我想在递归查询中执行此操作.我尽力使问题清楚如果你有任何问题很快得到答案

我有4个测试程序:PRC_TEST1,PRC_TEST2,PRC_TEST3,prc_test4

在PRC_TEST1内部,它正在执行PRC_TEST2 …并且PRC_TEST2正在执行prc_test3.并且prc_test3正在执行prc_test4

create or replace procedure prc_test1
as

begin
prc_test2();
end;
/

create or replace procedure prc_test2
as

begin
prc_test3();
end;
/

create or replace procedure prc_test3
as

begin
prc_test4();
end;
/

create or replace procedure prc_test4
as

begin
null;
end;
/

我想从递归查询中知道什么是prc_test2正在执行,同时我想知道该过程被引用..以下示例查询将解释我的结果.

在下面的查询中,我正在检查prc_test2引用的位置.

select referenced_name from user_dependencies where name =’PRC_TEST2′

第一个查询会给我prc_test3,因为PRC_test2正在执行prc_test3
然后我检查prc_test3是否正在执行一个程序

select referenced_name from user_dependencies where name =’PRC_TEST3′

当然结果将是prc_test4

同时我想知道是否有程序通过查询执行prc_test2 ..我可以知道

select name from user_dependencies where referenced_name=’PRC_TEST2′

我得到结果prc_test1,然后我确定是否有一个调用prc_test1的过程

select name from user_dependencies where referenced_name=’PRC_TEST1′
we will have no results.

我想要一个查询(或一个过程),它可以在一个查询中给我上述查询的所有结果

解决方法

作为方法之一(可能可以优化),您可以执行以下操作.

以下是我们的4个测试程序:

create or replace procedure proc4
as
begin
  null;
end;
/
create or replace procedure proc3
as
begin
  proc4;
end;
/
create or replace procedure proc2
as
begin
  proc3;
end;
/
create or replace procedure proc1
as
begin
  proc2;
end;
/

和依赖树:

with dependencies(d_name,d_referenced_name) as(
  select nvl(d1.name,d2.referenced_name),d1.referenced_name
   from user_dependencies d1
        full join user_dependencies d2
          on (d1.name = d2.referenced_name)
  where d1.type = 'PROCEDURE'
     or d2.type = 'PROCEDURE'
)
select concat( lpad('-',3*level,'-'),d.d_name) as res 
  from dependencies d 
start with d.d_name = 'PROC1'
connect by d.d_name = prior d.d_referenced_name

结果:

RES
------------------
---PROC1
------PROC2
---------PROC3
------------PROC4

SQLFiddle demo

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读