It’s possible to categorize exception handling into the following types:
– Named System Exceptions
– Named Programmer-Defined Exceptions
– WHEN OTHERS Clause

Example:

CREATE OR REPLACE PROCEDURE MY_STORED AS
  v_param varchar2(1);
  exc1 EXCEPTION;
  exc2 EXCEPTION;
  exc3 EXCEPTION;
BEGIN

    v_param := 3;

    IF v_param = 1 THEN
        raise exc1;
    ELSIF v_param = 2 THEN
        raise exc2;
    ELSE
       raise exc3;
    END IF;

EXCEPTION
WHEN exc1 THEN
  ROLLBACK;
  DBMS_OUTPUT.put_line('exc1');
WHEN exc2 THEN
  ROLLBACK;
  DBMS_OUTPUT.put_line('exc2');
WHEN exc3 THEN
  ROLLBACK;
  DBMS_OUTPUT.put_line('exc3');
WHEN INVALID_CURSOR THEN
  ROLLBACK;
  DBMS_OUTPUT.put_line('Invalid cursor system exception');
WHEN OTHERS THEN
  ROLLBACK;
  RAISE_APPLICATION_ERROR(-20000-(SQLCODE),SQLERRM); 
  [OR DBMS_OUTPUT.put_line('others');]
COMMIT;

END MY_STORED;