Here, I am only going to list the topics which one should consider to master Exception Handling.
1. Types of errors in Pl/sql- Compile time and Run time
2. How to read and understand the Compile time errors?
3. What are runtime erros?
4. What is basic block structure in plsql and what is Exception section in that?
5. Why is exception handling necessary? What are it's advantages?
6. What are the types of exceptions in Oracle plsql? What are Built in exceptions and their sub types?
7. What are User defined Exceptions and how they are different from Oracle named or unnamed exceptions?
8. What is the propogation path of exceptions? Cases of multiple nested blocks.
9. What happens if an exception is raised in the declaration section? What happens if that declaration section belongs to some inner block?
10. Similarly, what happens if an exception is raised in the exception block itself? What happens if that exception block is actually inside some inner block?
11. Can we reraise the exceptions in the exception block and pass it on to the outer block and how? or can we raise another exception inside the exception block?
12. What is When 'OTHERS' exception handler, why is it used, where is it used?
13. What is SQLCODE and SQLERRM and what are their uses?
14. What is EXCEPTION_INIT Pragma and why is it used?
15. What is RAISE_APPLICATION_ERROR? Why is it used?
Some tricky topics:-
16. How to EXCEPTION_INIT and RAISE_APPLICATION_ERROR to generate some meaningful error messages?
17. Can we start a new block inside the WHEN clause of exception block or an exception handler? What are the advantages of such block?
18. What is the beauty of a FOR loop when it comes to Exceptions? How to continue with rest of the iterations when exception occurs in of the iterations?
19. How do you find out the actual line no. of the occurence of an error programatically on rutime?
20. What are Bulk exceptions?
21. How do you handle the exceptions raised in Triggers?
And the list just goes on and on and on.