Moin,
hier mal 'n kleiner Vorschlag :
SQL-Code:
CREATE PROCEDURE HIERARCHIE (
C_ID INTEGER,
C_LEVEL INTEGER)
RETURNS (
O_CHEF_ID INTEGER,
O_EMP_ID INTEGER,
O_EMP_NAME VARCHAR (50),
O_LEVEL INTEGER)
AS
BEGIN
if (c_level is null) then
c_level = 0;
FOR
SELECT emp_ID, chef_ID, emp_name
FROM employee
WHERE (chef_ID = :C_ID) OR (chef_ID IS NULL AND :C_ID IS NULL)
INTO :O_EMP_ID, :O_CHEF_ID, :O_EMP_NAME
DO
BEGIN
o_level = c_level;
SUSPEND;
FOR
SELECT o_emp_ID, o_chef_ID, o_emp_name, o_level FROM HIERARCHIE(:O_EMP_ID,:c_level+1)
INTO :O_EMP_ID, :O_CHEF_ID, :O_EMP_NAME, :o_level
DO
BEGIN
SUSPEND;
END
END
END
Wie es scheint, bekommt man bei
EXECUTE PROCEDURE ... RETURNING VALUES immer nur das letzte Resultat zurück; die "Zwischenergebnisse" gehen leider flöten.
Ach ja, aufrufen kannst Du das Ganze mit
select * from HIERARCHIE(x,y)
wobei :
X = chef_id (oder null für die gesamte Hierarchie)
Y = start_level (= gewünschte zahl für den höchsten Level)
Tschüss,
Lutz