PL SQL Oracle PLSQL

SQL> CREATE TABLE book (
  2    isbn      CHAR(10) PRIMARY KEY,
  3    category  VARCHAR2(20),
  4    title     VARCHAR2(100),
  5    num_pages NUMBER,
  6    price     NUMBER,
  7    copyright NUMBER(4),
  8    emp1   NUMBER,
  9    emp2   NUMBER,
 10    emp3   NUMBER
 11  );
Table created.
SQL>
SQL> INSERT INTO book (isbn, category, title, num_pages, price, copyright, emp1, emp2, emp3)
  2             VALUES ('1', 'Database', 'Oracle', 563, 39.99, 2009, 1, 2, 3);
1 row created.
SQL> INSERT INTO book (isbn, category, title, num_pages, price, copyright, emp1, emp2)
  2             VALUES ('2', 'Database', 'MySQL', 765, 44.99, 2009, 4, 5);
1 row created.
SQL> INSERT INTO book (isbn, category, title, num_pages, price, copyright, emp1, emp2, emp3)
  2             VALUES ('3', 'Database', 'SQL Server', 404, 39.99, 2001, 6, 7, 8);
1 row created.
SQL>
SQL> CREATE TABLE inventory (
  2    isbn         CHAR(10),
  3    status       VARCHAR2(25) CHECK (status IN ('IN STOCK', 'BACKORDERED', 'FUTURE')),
  4    status_date  DATE,
  5    amount       NUMBER
  6  );
SQL>
SQL> INSERT INTO inventory (isbn, status, status_date, amount)VALUES ('1', 'BACKORDERED', TO_DATE('06-JUN-2004', 'DD-MON-YYYY'), 1000);
SQL> INSERT INTO inventory (isbn, status, status_date, amount)VALUES ('2', 'IN STOCK', NULL, 5000);
SQL> INSERT INTO inventory (isbn, status, status_date, amount)VALUES ('3', 'IN STOCK', NULL, 1000);
SQL>
SQL>
SQL> DECLARE
  2
  3     v_isbn INVENTORY.ISBN%TYPE;
  4     v_amount INVENTORY.AMOUNT%TYPE;
  5
  6     CURSOR inventory_cur IS SELECT isbn, amount FROM inventory
  7        WHERE status = 'IN STOCK'
  8        AND isbn IN (SELECT isbn FROM book)
  9        FOR UPDATE OF amount;
 10
 11  BEGIN
 12
 13     FOR y IN inventory_cur
 14     LOOP
 15        FETCH inventory_cur INTO v_isbn, v_amount;
 16        EXIT WHEN inventory_cur%NOTFOUND;
 17
 18        DBMS_OUTPUT.PUT_LINE(v_isbn||'Amount IN STOCK before: '||v_amount);
 19
 20        v_amount := v_amount + 50;
 21
 22        UPDATE inventory SET amount = v_amount WHERE CURRENT OF inventory_cur;
 23
 24        DBMS_OUTPUT.PUT_LINE(v_isbn||'Amount IN STOCK after: '||v_amount);
 25
 26     END LOOP;
 27
 28     COMMIT;
 29
 30  EXCEPTION
 31     WHEN OTHERS
 32     THEN
 33        DBMS_OUTPUT.PUT_LINE(SQLERRM);
 34        ROLLBACK;
 35  END;
 36  /
SQL> drop table book;
Table dropped.