However, exceptions cannot propagate across remote procedure calls (RPCs). Therefore, a PL/SQL block cannot catch an exception raised by a remote subprogram. For a workaround, see "Using raise_application_ error" .
Figure 6 - 1, Figure 6 - 2, and Figure 6 - 3 illustrate the basic propagation rules.
Figure 6 - 1. Propagation Rules: Example 1
Figure 6 - 2. Propagation Rules: Example 2
Figure 6 - 3. Propagation Rules: Example 3
An exception can propagate beyond its scope, that is, beyond the block in which it was declared. Consider the following example:
BEGIN ... DECLARE ---------- sub-block begins past_due EXCEPTION; BEGIN ... IF ... THEN RAISE past_due; END IF; END; ------------- sub-block ends EXCEPTION ... WHEN OTHERS THEN ROLLBACK; END;
Because the block in which it was declared has no handler for the exception named past_due, it propagates to the enclosing block. But, according to the scope rules, enclosing blocks cannot reference exceptions declared in a sub-block. So, only an OTHERS handler can catch the exception.