gpt4 book ai didi

oracle - 使用递归从查询中的一个表中获取多个结果

转载 作者:行者123 更新时间:2023-12-05 01:02:42 25 4
gpt4 key购买 nike

我想在递归查询中做到这一点。我尽量把问题说清楚如果你有任何问题请尽快回答

我有 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.



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

最佳答案

作为其中一种方法(可能可以优化),您可以执行以下操作。

以下是我们的 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

关于oracle - 使用递归从查询中的一个表中获取多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25970402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com