NB: DDL operations are not transactional.
While most of DDL operations in Oracle are atomic, the caveat is that any DDL operation issues an implicit commit. This may prove very confusing, as your transaction commits without calling commit() in your code.
However, you should seldom need to do DLL in an Oracle database. If your DDL concerns temporary tables, you definitely need to read
this (search for documentation for your DB version if it is different from this one). Temporary tables in Oracle are different beasts from most other database systems. Very useful information can be also found on the
AskTom site - search for "temporary table".
Edited: I've written a misleading description of SERIALIZABLE isloation level here previously. Here is what the Oracle documentation says on isolation levels:
The ISOLATION_LEVEL parameter specifies how transactions containing database modifications are handled. ISOLATION_LEVEL is a session parameter only, not an initialization parameter.
SERIALIZABLE indicates that transactions in the session use the serializable transaction isolation mode as specified in SQL92. That is, if a serializable transaction attempts to execute a DML statement that updates rows currently being updated by another uncommitted transaction at the start of the serializable transaction, then the DML statement fails. A serializable transaction can see its own updates.
READ COMMITTED indicates that transactions in the session will use the default Oracle Database transaction behavior. That is, if the transaction contains DML that requires row locks held by another transaction, then the DML statement will wait until the row locks are released.