v:- 9.2
There seem to be several options:-

2)sys_context('userenv', 'current_sql')
3)joins on v$session, v$sql, v$sqlarea(8i era methods...)

However for an audtiting requirement where the user does not have say a DDL capability through roles assigned and the DDL will obviously fail which of the above will capture the failed DDL ?

Read that ora_sql_txt will only capture successful DDL's - in which case will options 2,3 be the way to go or any other ideas ? Also will failed DDL's be in the cache from where v$sql, v$sqlarea get populated ?