CREATE PACKAGE cv_types AS
TYPE LibCurTyp IS REF CURSOR;
...
END cv_types;
CREATE PROCEDURE find_item (title VARCHAR2(100),lib_cv IN OUT cv_types.LibCurTyp) AS
code BINARY_INTEGER;
BEGIN
SELECT item_code FROM titles INTO code WHERE item_title = title;
IF code = 1 THEN
OPEN lib_cv FOR SELECT * FROM books WHERE book_title = title;
ELSIF code = 2 THEN
OPEN lib_cv FOR SELECT * FROM periodicals WHERE periodical_title = title;
ELSIF code = 3 THEN
OPEN lib_cv FOR SELECT * FROM tapes WHERE tape_title = title;
END IF;
END find_item;
DECLARE
lib_cv cv_types.LibCurTyp;
book_rec books%ROWTYPE;
periodical_rec periodicals%ROWTYPE;
tape_rec tapes%ROWTYPE;
BEGIN
get_title(:title); -- title is a host variable
find_item(:title, lib_cv);
FETCH lib_cv INTO book_rec;
display_book(book_rec);
EXCEPTION
WHEN ROWTYPE_MISMATCH THEN
BEGIN
FETCH lib_cv INTO periodical_rec;
display_periodical(periodical_rec);
EXCEPTION
WHEN ROWTYPE_MISMATCH THEN
FETCH lib_cv INTO tape_rec;
display_tape(tape_rec);
END;
END;