CREATE OR REPLACE PACKAGE table_ids AS TYPE return_cursor IS REF CURSOR; PROCEDURE get_next_session_id(session_cursor OUT return_cursor); END table_ids; / CREATE OR REPLACE PACKAGE BODY table_ids AS PROCEDURE get_next_session_id(session_cursor OUT return_cursor) IS BEGIN OPEN session_cursor FOR SELECT 'S'||lpad(session_id.nextval,5,'0') FROM dual; EXCEPTION WHEN NO_DATA_FOUND THEN raise_application_error(-20000, 'No more rows.'); WHEN OTHERS THEN raise_application_error(-20001, 'There was an undeterminable error.'); END get_next_session_id;