Sequential Control Statements
Unlike the IF
and LOOP
statements, the sequential control statements GOTO
and NULL
are not crucial to PL/SQL programming.
The GOTO
statement, which goes to a specified statement, is seldom needed. Occasionally, it simplifies logic enough to warrant its use.
The NULL
statement, which does nothing, can improve readability by making the meaning and action of conditional statements clear.
Topics
GOTO Statement
The GOTO
statement transfers control to a label unconditionally. The label must be unique in its scope and must precede an executable statement or a PL/SQL block. When run, the GOTO
statement transfers control to the labeled statement or block.
For GOTO
statement restrictions, see "GOTO Statement".
Use GOTO
statements sparingly—overusing them results in code that is hard to understand and maintain. Do not use a GOTO
statement to transfer control from a deeply nested structure to an exception handler. Instead, raise an exception. For information about the PL/SQL exception-handling mechanism, see PL/SQL Error Handling.
The GOTO
statement transfers control to the first enclosing block in which the referenced label appears.
NULL Statement
The NULL
statement only passes control to the next statement. Some languages refer to such an instruction as a no-op (no operation).
Some uses for the NULL
statement are:
-
To provide a target for a
GOTO
statement -
To improve readability by making the meaning and action of conditional statements clear
-
To create placeholders and stub subprograms
-
To show that you are aware of a possibility, but that no action is necessary
Note:
Using the NULL
statement might raise an unreachable
code
warning if warnings are enabled. For information about warnings, see "Compile-Time Warnings".
Example 5-30 NULL Statement Showing No Action
The NULL
statement emphasizes that only salespersons receive commissions.
DECLARE
v_job_id VARCHAR2(10);
v_emp_id NUMBER(6) := 110;
BEGIN
SELECT job_id INTO v_job_id
FROM employees
WHERE employee_id = v_emp_id;
IF v_job_id = 'SA_REP' THEN
UPDATE employees
SET commission_pct = commission_pct * 1.2;
ELSE
NULL; -- Employee is not a sales rep
END IF;
END;
/
Example 5-31 NULL Statement as Placeholder During Subprogram Creation
The NULL
statement lets you compile this subprogram and fill in the real body later.
CREATE OR REPLACE PROCEDURE award_bonus ( emp_id NUMBER, bonus NUMBER ) AUTHID DEFINER AS BEGIN -- Executable part starts here NULL; -- Placeholder -- (raises "unreachable code" if warnings enabled) END award_bonus; /
Example 5-32 NULL Statement in ELSE Clause of Simple CASE Statement
The NULL
statement shows that you have chosen to take no action for grades other than A, B, C, D, and F.
CREATE OR REPLACE PROCEDURE print_grade (
grade CHAR
) AUTHID DEFINER AS
BEGIN
CASE grade
WHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('Excellent');
WHEN 'B' THEN DBMS_OUTPUT.PUT_LINE('Very Good');
WHEN 'C' THEN DBMS_OUTPUT.PUT_LINE('Good');
WHEN 'D' THEN DBMS_OUTPUT.PUT_LINE('Fair');
WHEN 'F' THEN DBMS_OUTPUT.PUT_LINE('Poor');
ELSE NULL;
END CASE;
END;
/
BEGIN
print_grade('A');
print_grade('S');
END;
/
Result:
Excellent