In PL/SQL, a warning or error condition is called an exception.
Exceptions can be internally defined (by the runtime system) or user defined.
A runtime error such as stack overflow or division by zero stops normal processing and returns control to the operating system.
In PL/SQL, exception handling mechanism lets the user trap such conditions,
So that it can continue operating in the presence of errors.
Some common internal exceptions have predefined names, such as ZERO_DIVIDE and STORAGE_ERROR.
The other internal exceptions can be given names.
Exceptions can be defined in the declarative part of any PL/SQL block, subprogram, or package.
Unlike internal exceptions, user-defined exceptions must be given names.
When an error occurs, an exception is raised.
That is, normal execution stops and control transfers to the exception-handling part of your PL/SQL block or subprogram.
Internal exceptions are raised implicitly (automatically) by the runtime system.
User-defined exceptions must be raised explicitly by RAISE statements, which can also raise predefined exceptions.
A List Of Pre-defined Named Exception
====================================
1.cursor_already_open
2.invalid_cursor
3.dup_val_on_index
4.invalid_number
5.no_data_found
6.too_many_rows
7.value_error
8.zero_divide
9.login_denied
10.not_logged_on
11.program_error
12.storage_error
13.timeout_on_resource
14.rowtype_mismatch
15.case_not_found
16.access_into_null
17.collection_is_null
18.rowtype_mismatch
19.self_is_null
20.subscript_beyond_count
21.subscript_outside_limit
22.sys_invalid_rowid
23.others
Also check EXCEPTIONS - 2