这样做的关键在于“递归”这个词。为此,请创建一个调用自身的过程。这是父母的一个例子,但因为它使用光标滚动条目,所以应该很简单地知道如何使用它来查找涉及递归的子关系和其他关系。
CREATE OR REPLACE PROCEDURE find_parents(
org_id NUMBER,
lvl NUMBER DEFAULT 1) AS
c_parent table1.id%TYPE;
c_name table1.name%TYPE;
CURSOR c_parents (c_id table1.id%TYPE) IS
SELECT parent, name FROM table1 WHERE (id = c_id);
BEGIN
dbms_output.put('-');
OPEN c_parents(org_id);
LOOP
FETCH c_parents INTO c_parent, c_name;
EXIT WHEN c_parents%notfound;
dbms_output.put_line('Level ' || lvl || ' parent: [ID: ' || c_parent || ', NAME: ' || c_name || ']');
find_parents(c_parent, lvl + 1);
END LOOP;
CLOSE c_parents;
END;