If you can update your question with a deadlock, this will be useful information. (When your application encounters a dead end, Oracle will raise ORA-00060 and the trace file will be written to user_dump_dest.) If you look in the trace file, you will find a section called "Deadlock Graph". If you can publish this, as well as publish the expression that caused the impasse and other statements related to the impasse, we can begin to draw some conclusions. (All requested information is available in the trace file.)
As Alessandro mentioned, it is possible that sessions block different rows in the same table until a dead end is due to unindexed foreign keys in the child table of the parent / child relationship. In addition, it is possible that you can have deadlocks in two sessions, updating different rows of the same table, even if the table is not part of the parent / child relationship, if, for example, the table has a shortage of ITL records.
Resend the information above, and Iβm sure that we can determine the root cause of your deadlock.
Added on 7/30/2012 **
Add the following, now that the deadlock trace file has been set: Well, first, based on the contents of the trace file, this is a simple dead end due to matches / collisions of sessions in the lines that they are trying to block. Despite your previous comments about the deadlock on different lines, I have to tell you that this particular deadlock is related to row level locking on the same lines.
The fact that the deadlock diagram shows the lock mode is held in the βXβ position (exception), and the standby mode is βXβ, it tells me that this is a simple row level lock.
In this case, SID 20 performs "delete from RPT_TABLE.TEMP_TABLE_T1, where TEMP_T1_ID =: 1", and already has a lock on rowid AAAPDIAAMAAAEfIAAA.
Meanwhile, SID 790 performs "RPT_TABLE.T1_UPDATE_StoredProc", and already holds the lock on rowid AAAPDIAAMAAAEfGAAA.
A note from the βLines Waiting inβ section of the trace file that SID 20 expects in a row that SID 790 supports, and SID 790 expects in a row that SID 20 holds. This is a classic dead end.
Additional Information:
The queue type is TX (see deadlock schedule), so it is definitely not blocked due to unindexed foreign keys. If it were blocked due to non-indexed FKs, the queue type would be TM, not TX. (There is at least one other case where TM enqueues are involved, and these are not unindexed FKs. Therefore, do not assume that TM enqueue always means unindexed FKs.)
Standby is βXβ (exception), so it is row-level locking. If the standby mode was "S" (general), then this will not be row-level locking. Rather, it could be a lack of ITL or enforcement of a PC or the UK.
Hope this helps!