ora-00054 resource busy
ora-00054 resource busy. Loop this function when you get ora-00054.
Last updated:
Warning: Review and test in a non-production environment before running.
FUNCTION get_resource_busy ( p_recordKey IN NUMBER,
p_table_name IN VARCHAR2)
RETURN NUMBER
IS
v_Status NUMBER:=0;
v_sql_QUERY VARCHAR2(2000);
c_max_wait_count CONSTANT:=10;
v_wait_count number:=0;
resource_busy EXCEPTION;
PRAGMA EXCEPTION_INIT(resource_busy,-54);
BEGIN
v_sql_QUERY :=
' select RecordKey from ' || p_table_name ||
' where RecordKey = ' || p_recordKey ||
' for update nowait';
BEGIN
EXECUTE IMMEDIATE v_sql_QUERY INTO v_Status;
EXCEPTION
WHEN resource_busy THEN
IF v_wait_count > c_max_wait_count THEN
v_Status := -99;
goto end_Func;
ELSE
dbms_lock.sleep(5); -- wait another 5 seconds
v_wait_count := v_wait_count + 1;
END IF;
WHEN others THEN
v_Status := sqlcode;
END;
<<end_Func>>
RETURN v_Status;
END get_resource_busy;