GOTO statement v14
The GOTO statement causes the point of execution to jump to the statement with the specified label. The syntax of a GOTO statement is:
GOTO <label>
label is a name assigned to an executable statement. label must be unique in the scope of the function, procedure, or anonymous block.
To label a statement, use this syntax:
<<label>> <statement>
statement is the point of execution that the program jumps to.
You can label assignment statements, any SQL statement (like INSERT, UPDATE, and CREATE), and selected procedural language statements. The procedural language statements that can be labeled are:
IFEXITRETURNRAISEEXECUTEPERFORMGET DIAGNOSTICSOPENFETCHMOVECLOSENULLCOMMITROLLBACKGOTOCASELOOPWHILEFOR
exit is considered a keyword and you can't use it as the name of a label.
GOTO statements can't transfer control into a conditional block or sub-block. However, they can transfer control from a conditional block or sub-block.
GOTO statements have the following restrictions:
- A
GOTOstatement can't jump to a declaration. - A
GOTOstatement can't transfer control to another function, or procedure. - Don't place a
labelat the end of a block, function, or procedure.
This example verifies that an employee record contains a name, job description, and employee hire date. If any piece of information is missing, a GOTO statement transfers the point of execution to a statement that prints a message that the employee isn't valid.
CREATE OR REPLACE PROCEDURE verify_emp (
p_empno NUMBER
)
IS
v_ename emp.ename%TYPE;
v_job emp.job%TYPE;
v_hiredate emp.hiredate%TYPE;
BEGIN
SELECT ename, job, hiredate
INTO v_ename, v_job, v_hiredate FROM emp
WHERE empno = p_empno;
IF v_ename IS NULL THEN
GOTO invalid_emp;
END IF;
IF v_job IS NULL THEN
GOTO invalid_emp;
END IF;
IF v_hiredate IS NULL THEN
GOTO invalid_emp;
END IF;
DBMS_OUTPUT.PUT_LINE('Employee ' || p_empno ||
' validated without errors.');
RETURN;
<<invalid_emp>> DBMS_OUTPUT.PUT_LINE('Employee ' || p_empno ||
' is not a valid employee.');
END;