SPL block structure overview v16

Regardless of whether the program is a procedure, function, subprogram, or trigger, an SPL program has the same block structure. A block consists of up to three sections: an optional declaration section, a mandatory executable section, and an optional exception section. Minimally, a block has an executable section that consists of one or more SPL statements between the keywords BEGIN and END.

Use the optional declaration section to declare variables, cursors, types, and subprograms that are used by the statements in the executable and exception sections. Declarations appear just before the BEGIN keyword of the executable section. Depending on the context of where the block is used, the declaration section can begin with the keyword DECLARE.

You can include an exception section in the BEGIN - END block. The exception section begins with the keyword EXCEPTION and continues until the end of the block in which it appears. If an exception is thrown by a statement in the block, program control might go to the exception section where the thrown exception is handled, depending on the exception and the contents of the exception section.

The following is the general structure of a block:

[ [ DECLARE ]
      <pragmas>
      <declarations> ]
    BEGIN
      <statements>
  [ EXCEPTION
      WHEN <exception_condition> THEN
        <statements> [, ...] ]
    END;
  • pragmas are the directives (AUTONOMOUS_TRANSACTION is the currently supported pragma).
  • declarations are one or more variable, cursor, type, or subprogram declarations that are local to the block. If subprogram declarations are included, you must declare them after all other variable, cursor, and type declarations. Terminate each declaration with a semicolon. The use of the keyword DECLARE depends on the context in which the block appears.
  • statements are one or more SPL statements. Terminate each statement with a semicolon. You must also terminate the end of the block denoted by the keyword END with a semicolon.
  • If present, the keyword EXCEPTION marks the beginning of the exception section. exception_condition is a conditional expression testing for one or more types of exceptions. If an exception matches one of the exceptions in exception_condition, the statements following the WHEN exception_condition clause are executed. There can be one or more WHEN exception_condition clauses, each followed by statements.
Note

A BEGIN/END block is considered a statement, thus you can nest blocks. The exception section can also contain nested blocks.

The following is the simplest possible block, consisting of the NULL statement in the executable section. The NULL statement is an executable statement that does nothing.

BEGIN
   NULL;
END;

The following block contains a declaration section as well as the executable section:

DECLARE
    v_numerator     NUMBER(2);
    v_denominator   NUMBER(2);
    v_result        NUMBER(5,2);
BEGIN
   v_numerator := 75;
   v_denominator := 14;
   v_result := v_numerator / v_denominator;
   DBMS_OUTPUT.PUT_LINE(v_numerator || ' divided by ' || v_denominator ||
       ' is ' || v_result);
END;

In this example, three numeric variables are declared of data type NUMBER. Values are assigned to two of the variables, and one number is divided by the other. Results are stored in a third variable and then displayed. The output is:

Output
75 divided by 14 is 5.36

The following block consists of a declaration, an executable, and an exception:

DECLARE
    v_numerator     NUMBER(2);
    v_denominator   NUMBER(2);
    v_result        NUMBER(5,2);
BEGIN
   v_numerator := 75;
   v_denominator := 0;
   v_result := v_numerator / v_denominator;
   DBMS_OUTPUT.PUT_LINE(v_numerator || ' divided by ' || v_denominator ||
       ' is ' || v_result);
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('An exception occurred');
END;

The following output shows that the statement in the exception section is executed as a result of the division by zero:

Output
An exception occurred