It is possible to determine all Patch Set Updates that has been applied to a database using a simple SQL statement - but note that this will only retrieve the details of patchsets that contained a database element (i.e. you had to run a SQL script in as part of the patch).
Note: It is better to use the opatch utility to retrieve the details of all patches and patchsets applied to an environment. However, this query may still prove useful.
col Time for a18 col target for a30 col action for a30 select to_char(action_time,'DD-MON-YYYY HH24:MI:SS') time , namespace||' '||version target , action||' '||comments action from dba_registry_history;