PV003: Seminární skupiny - náplň výuky

7. Programování v Oracle - pokračování

Kurzory v PL/SQL

Řešení příkladu:

CREATE OR REPLACE PROCEDURE importuj_katalog IS
  CURSOR katcur IS select * from xdohnal.katalog;
  zaz katcur%ROWTYPE;
  CURSOR hledej(jm knihy.nazev%TYPE) IS select id from knihy where nazev = jm;
  kid knihy.id%TYPE;
  vydid integer;
BEGIN
  OPEN katcur;
  LOOP
    FETCH katcur INTO zaz;
    EXIT WHEN katcur%NOTFOUND;
    OPEN hledej(zaz.nazev);
    FETCH hledej INTO kid;
    IF hledej%NOTFOUND THEN
      SELECT vydavatel_id INTO vydid FROM vydavatele
        WHERE vydavatel_jmeno = zaz.vydavatel;
      INSERT INTO knihy VALUES
        (seq_knihy_id.nextval, zaz.nazev, vydid, null, zaz.isbn);
      SELECT seq_knihy_id.currval INTO kid FROM dual;
    END IF;
    CLOSE hledej;

    INSERT INTO vytisky VALUES (seq_vytisky_id.nextval, kid, zaz.porizeno);
  END LOOP;
  CLOSE katcur;
END;