Say you have a transaction inserting into two tables. Either both inserts must succeed or both fail.
If the second insert fails and you bury the exception in a when others, the first insert is still present!
SQL> create table par (
2 x int
3 );
Table created.
SQL> create table chld (
2 y int
3 );
Table created.
SQL>
SQL> begin
2 insert into par values (1);
3 insert into chld values ('a');
4 exception
5 when others then
6 null;
7 end;
8 /
PL/SQL procedure successfully completed.
SQL> select * from par;
X
----------
1
SQL> select * from chld;
no rows selected
So you can have "incomplete" transactions, leading to inconsistent data. If you raise the exception, this doesn't happen:
SQL> rollback;
Rollback complete.
SQL>
SQL> begin
2 insert into par values (1);
3 insert into chld values ('a');
4 exception
5 when others then
6 raise;
7 end;
8 /
begin
*
ERROR at line 1:
ORA-01722: invalid number
ORA-06512: at line 6
SQL> select * from par;
no rows selected
SQL> select * from chld;
no rows selected