...then try again. Then try again more 125 times. Then quit.
PROCEDURE get_id
( p_id_out OUT NUMBER
, p_name_in IN VARCHAR2
, p_create_user_in IN VARCHAR2 )
IS
v_new_id NUMBER := 0;
v_max_tries PLS_INTEGER := 127;
v_default_id NUMBER := 0;
BEGIN
v_new_id := lookup_id(p_name_in); -- will be 0 if not found
WHILE v_new_id = 0 AND v_max_tries > 0
LOOP
BEGIN
INSERT INTO entry
( entry_id
, entry_name
, create_date
, create_user
, create_app
, mod_date
, mod_user
, mod_app)
VALUES
( entry_seq.NEXTVAL
, p_name_in
, SYSDATE
, p_create_user_in
, 'get_id'
, SYSDATE
, p_create_user_in
, 'get_id' )
RETURNING entry_id INTO v_new_id;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
v_max_tries := v_max_tries - 1;
END LOOP;
p_id_out := v_new_id;
END get_id;
Thanks BB for sending this.