Consider the following (simplistic) situation:
CREATE TABLE PARENT (
PARENT_ID INT PRIMARY KEY
);
CREATE TABLE CHILD (
CHILD_ID INT PRIMARY KEY,
PARENT_ID INT NOT NULL,
FOREIGN KEY (PARENT_ID) REFERENCES PARENT (PARENT_ID)
);
There is no index on CHILD.PARENT_ID, so modifying/deleting PARENT is expensive (Oracle needs to do a full table scan on CHILD to enforce the referential integrity). Yet the execution plan for the following statement…
DELETE FROM PARENT WHERE PARENT_ID = 1
…does not show the table scan (SYS_C0070229 is the index on PARENT.PARENT_ID):

I know there are ways to see all unindexed FOREIGN KEYs, but it would be even better if I could be “warned” of a potential problem in the query execution plan itself (BTW, MS SQL Server and possibly other databases do that).
Is that possible in Oracle?
I’m using Oracle 10.2 if that matters.
I have altered your constraint to add the “ON DELETE CASCADE”, without which Oracle will raise an error.(The default for foreign key violations is delete restrict)
I believe the answer to your question is “NO”, Oracle does not warn you about the unindexed foreign key column. In practice, most such columns are indexed, since this is how you would be joining the parent to the child.
If you want to prove to someone that not having an index will cause locking issues and escalations (something not very desirable), you could simply disable the table lock and show the error.
And for the explain plan question, as others have pointed out, the sql to delete from the child table is a recursive SQL and is not shown in the explain plan.
If you TRACE the session, you’ll see the recursive SQL.
Useful Links : http://www.oracle-base.com/articles/10g/SQLTrace10046TrcsessAndTkprof10g.php