I have a procedure that looks similar to this:
PROCEDURE Proc1 (p_PRICING_DATE DATE, p_FUND_NUMBER NUMBER)
IS
BEGIN
DELETE FROM Tab1
WHERE pricing_date = p_PRICING_DATE
AND fund_number = p_FUND_NUMBER;
INSERT INTO Tab1
SELECT pricing_date, fund_number, COUNT(*)
FROM Tab2
GROUP BY pricing_date, fund_number;
COMMIT;
END;
It is called by another procedure:
PROCEDURE Proc2
IS
BEGIN
FOR Cur1 IN(SELECT DISTINCT pricing_date, fund_number FROM Tab3)
LOOP
Proc1(i.pricing_date, i.fund_number);
END LOOP;
END;
The routine runs fine when Proc1 is executed sequencially.
If I modify Proc2 to submit 10 calls to Proc1 via DBMS_SCHEDULER to run simultaniously most executions fail with "ORA-00060: deadlock detected while waiting for resource".
If I comment out "DELETE FROM Tab1..." block all 10 simultaneous executions run fine.
Based on the program logic each of the 10 calls to Proc1 deletes a separate non-intersecting set of rows. I tested and verified that.
I also increased INITRANS on Tab1 to 50.
Any suggestions?
Thanks
Art
[Updated on: Thu, 11 January 2007 12:10]
Report message to a moderator