Hierarchical Query Oracle PLSQL

SQL>
SQL>
SQL> CREATE TABLE book (
  2    isbn      VARCHAR2(10) PRIMARY KEY,
  3    parent_isbn VARCHAR2(10),
  4    series    VARCHAR2(20),
  5    category  VARCHAR2(20),
  6    title     VARCHAR2(100),
  7    num_pages NUMBER,
  8    price     NUMBER,
  9    copyright NUMBER(4));
Table created.
SQL>
SQL> INSERT INTO book (isbn, parent_isbn, series, category, title, num_pages, price, copyright)
  2    VALUES ('1', '2', 'Oracle', 'Oracle Server', 'SQL', 664, 49.99, 2002);
1 row created.
SQL>
SQL> INSERT INTO book (isbn, parent_isbn, series, category, title, num_pages, price, copyright)
  2    VALUES ('2', null, 'Oracle', 'Oracle Server', 'Java', 772, 49.99, 2000);
1 row created.
SQL>
SQL> INSERT INTO book (isbn, parent_isbn, series, category, title, num_pages, price, copyright)
  2    VALUES ('3', '1', 'Oracle', 'Oracle Server', 'XML', 1008, 54.99, 2004);
1 row created.
SQL>
SQL> INSERT INTO book (isbn, parent_isbn, series, category, title, num_pages, price, copyright)
  2    VALUES ('4', null, 'Oracle Ebusiness', 'Oracle Ebusiness', 'Oracle E-Business Suite Financials Handbook', 820, 59.99, 2002);
1 row created.
SQL>
SQL>
SQL> ALTER TABLE book
  2  ADD position NUMBER(10);
Table altered.
SQL>
SQL>
SQL> SET SERVEROUTPUT ON
SQL>
SQL> DECLARE
  2     v_level PLS_INTEGER;
  3     v_title book.TITLE%TYPE;
  4
  5     CURSOR cur_tree IS SELECT isbn, title, series FROM book;
  6  BEGIN
  7
  8  FOR l IN cur_tree
  9  LOOP
 10
 11     SELECT max(LEVEL) INTO v_level FROM book
 12     START WITH isbn = l.isbn
 13     CONNECT BY PRIOR parent_isbn = isbn;
 14
 15     UPDATE book SET position = v_level WHERE isbn = l.isbn;
 16
 17  END LOOP;
 18
 19
 20  COMMIT;
 21
 22  EXCEPTION
 23     WHEN OTHERS
 24     THEN
 25        DBMS_OUTPUT.PUT_LINE(sqlerrm);
 26  END;
 27  /
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL>
SQL> SET PAGES 9999
SQL> SELECT title, position
  2  FROM book
  3  ORDER BY series, position;
TITLE
--------------------------------------------------------------------------------
  POSITION
----------
Java
         1
SQL
         2
XML
         3
Oracle E-Business Suite Financials Handbook
         1
4 rows selected.
SQL>
SQL>
SQL> INSERT INTO book (isbn, parent_isbn, series, category, title, num_pages, price, copyright)
  2    VALUES ('111111', null, 'Oracle', 'Oracle Server', 'Oracle8.0 PL/SQL Programming', 772, 49.99, 2000);
1 row created.
SQL>
SQL> UPDATE book
  2  SET parent_isbn = '111111'
  3  WHERE isbn = '2';
1 row updated.
SQL>
SQL> COMMIT;
Commit complete.
SQL>
SQL>
SQL> SELECT title, position
  2  FROM book
  3  ORDER BY series, position;
TITLE
--------------------------------------------------------------------------------
  POSITION
----------
Java
         1
SQL
         2
XML
         3
Oracle8.0 PL/SQL Programming
Oracle E-Business Suite Financials Handbook
         1
5 rows selected.
SQL>