oracle - 递归地向数组添加值 pl/sql
问题描述
我有两个表 INFOAGENT(代理信息),HIERARCHIAGENT(每个代理的分层附件)我希望创建一个程序(pl/sql),它在数组中递归地添加公司的 paramidal 层次结构,直到代理代码在参数中传递,并返回以 CEO 开头的数组
这是数据。
INFOAGENT
ID NAME
P001 AAAA
P002 BBBB
P003 CCCC
P004 DDDD
P005 EEEE
P006 FFFF
HIERARCHIAGENT
INCHARGE IDAGENT
P001 P002
P001 P003
P002 P005
P003 P006
P003 P004
我试过这个
type hierarchie is table of INFOAGENT.ID%TYPE index by binary_integer;
create or replace PROCEDURE AGENTHIERARCHIE ( codeagent INFOAGENT.ID%TYPE,
arrayresponse out hierarchie%TYPE)
AS
DECLARE
arrayresponse hierarchie;
cursor cur is SELECT ID FROM INFOAGENT where ID= codeagent
begin
FOR rec_agent in cur LOOP
// i don't know how to do it here
end loop;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(replace(sqlerrm,'ORA-','ORA_'));
END AGENTHIERARCHIE ;
解决方案
我认为这可能符合您的要求。至少,它可以帮助您入门。
CREATE OR REPLACE PACKAGE hierarcy_defs AS
TYPE hierarcy IS TABLE OF INFOAGENT.ID%TYPE INDEX BY BINARY_INTEGER;
END hierarcy_defs;
CREATE OR REPLACE PROCEDURE agenthierarchy (
codeagent IN infoagent.id%TYPE,
p_index IN BINARY_INTEGER,
arrayresponse IN OUT hierarcy_defs.hierarcy)
AS
i BINARY_INTEGER;
l_codeagent infoagent.id%TYPE;
BEGIN
i := p_index;
arrayresponse(i) := codeagent;
BEGIN
SELECT incharge
INTO l_codeagent
FROM hierarchiagent
WHERE idagent = codeagent;
i := i + 1;
agenthierarchy(l_codeagent, i, arrayresponse);
EXCEPTION
WHEN NO_DATA_FOUND THEN
FOR j IN arrayresponse.FIRST .. arrayresponse.LAST
LOOP
DBMS_OUTPUT.PUT_LINE(arrayresponse(j));
END LOOP;
END;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(REPLACE(SQLERRM,'ORA-','ORA_'));
END agenthierarchy;
用于测试的匿名块:
DECLARE
l_arrayresponse hierarcy_defs.hierarcy;
BEGIN
agenthierarchy('P006', 1, l_arrayresponse);
END;
推荐阅读
- javascript - 当用户单击消息上的反应时向用户添加角色
- python - discord.py 的语法无效
- html - 我如何全屏显示
- php - 如何从 Ionic 接收 PHP 中的 $ FILES?
- angular - 检测变量何时是 Typescript 中的某个值
- firebase - 在颤振飞镖应用程序中从 firebase 检索数据时遇到问题。无法获取 DocumentSnapshotPlatform 上不存在的字段
- javascript - 通过将对象键与值匹配来映射两个单独的数组
- reactjs - 将 .ts 扩展名添加到 react-create-script
- elasticsearch - Elastic Search 是只读 Api 的良好数据存储吗?
- c# - 如何让 .Net Framework SignalR 客户端连接到 .Net Core SignalR Server?