Я думаю, что это может удовлетворить ваши требования. По крайней мере, это может помочь вам начать.
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;