1.You can define error message for predefined oracle error number.. But once you declare pragma statement, exception are handled implicitly... No need to raise exception explicitly...
2.User could define error message for predefined ora- error number. I guess this would be advantage of using it..
3.The pragma actually makes it possible to check for errors which are not predefined. the only other way would be to check with 'WHEN OTHERS' clause and then accessing the oracle error code.
4.To enhance application interface and display accurate reason for an error.