Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
50
Добавлен:
16.04.2013
Размер:
5.97 Mб
Скачать

EXIT Statement

EXIT Statement

The EXIT statement breaks out of a loop. The EXIT statement has two forms: the unconditional EXIT and the conditional EXIT WHEN. With either form, you can name the loop to be exited. For more information, see "Controlling Loop Iterations: LOOP and EXIT Statements" on page 4-6.

Syntax

exit_statement

 

 

label_name

WHEN

boolean_expression

EXIT

 

;

Keyword and Parameter Description

boolean_expression

An expression that returns the Boolean value TRUE, FALSE, or NULL. It is evaluated with each iteration of the loop. If the expression returns TRUE, the current loop (or the loop labeled by label_name) is exited immediately. For the syntax of boolean_expression, see "Expressions" on page 13-52.

EXIT

An unconditional EXIT statement (that is, one without a WHEN clause) exits the current loop immediately. Execution resumes with the statement following the loop.

label_name

Identifies the loop exit from: either the current loop, or any enclosing labeled loop.

Usage Notes

The EXIT statement can be used only inside a loop. PL/SQL lets you code an infinite loop. For example, the following loop will never terminate normally:

WHILE TRUE LOOP ... END LOOP;

In such cases, you must use an EXIT statement to exit the loop.

If you use an EXIT statement to exit a cursor FOR loop prematurely, the cursor is closed automatically. The cursor is also closed automatically if an exception is raised inside the loop.

Examples

The EXIT statement in the following example is not allowed because you cannot exit from a block directly; you can exit only from a loop:

DECLARE

amount NUMBER; maximum NUMBER;

BEGIN

...

BEGIN

...

IF amount >= maximum THEN

13-50 PL/SQL User's Guide and Reference

EXIT Statement

EXIT; -- not allowed; use RETURN instead

END IF;

END;

The following loop normally executes ten times, but it will exit prematurely if there are less than ten rows to fetch:

FOR i IN 1..10 LOOP FETCH c1 INTO emp_rec; EXIT WHEN c1%NOTFOUND;

total_comm := total_comm + emp_rec.comm; END LOOP;

The following example illustrates the use of loop labels:

<<outer>>

FOR i IN 1..10 LOOP

...

<<inner>>

FOR j IN 1..100 LOOP

...

EXIT outer WHEN ... -- exits both loops END LOOP inner;

END LOOP outer;

Related Topics

Expressions, LOOP Statements

PL/SQL Language Elements 13-51

Expressions

Expressions

An expression is an arbitrarily complex combination of variables, constants, literals, operators, and function calls. The simplest expression is a single variable.

The PL/SQL compiler determines the datatype of an expression from the types of the variables, constants, literals, and operators that comprise the expression. Every time the expression is evaluated, a single value of that type results. For more information, see "PL/SQL Expressions and Comparisons" on page 2-17.

Syntax

expression

(

boolean_expression

character_expression ) date_expression numeric_expression

boolean_expression

NOT

AND

OR

boolean_constant_name boolean_function_call

boolean_literal boolean_variable_name other_boolean_form

boolean_constant_name

boolean_function_call

NOT

boolean_literal

boolean_variable_name

other_boolean_form

13-52 PL/SQL User's Guide and Reference

Expressions

other_boolean_form

 

 

 

 

 

 

 

collection_name

.

EXISTS

(

index

)

 

 

cursor_name

 

 

 

 

 

 

 

 

 

 

 

 

 

FOUND

 

 

cursor_variable_name

 

 

 

 

 

 

 

 

 

%

ISOPEN

 

 

:

host_cursor_variable_name

 

 

 

 

 

 

 

 

 

 

 

NOTFOUND

 

 

SQL

 

 

 

 

 

 

 

 

 

 

relational_operator

expression

 

 

 

 

 

 

NOT

 

 

 

 

 

expression

IS

 

NULL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LIKE

pattern

 

 

 

 

 

NOT

BETWEEN

expression

AND

expression

 

 

 

 

 

 

,

 

 

 

 

 

 

IN

(

expression

)

 

character_expression

 

 

 

 

 

 

 

character_constant_name character_function_call character_literal

character_variable_name

: indicator_name

: host_variable_name

character_constant_name character_function_call

character_literal

||

character_variable_name

: indicator_name

: host_variable_name

PL/SQL Language Elements 13-53

Expressions

numeric_subexpression

cursor_name

cursor_variable_name

% ROWCOUNT

: host_cursor_variable_name

SQL

 

 

 

 

 

SQL

%

BULK_ROWCOUNT

(

index

)

 

 

 

:

indicator_name

 

 

:

host_variable_name

 

 

 

 

numeric_constant_name

 

 

**

exponent

numeric_function_call

 

 

 

 

numeric_literal numeric_variable_name

COUNT

FIRST

LAST

collection_name .

LIMIT

NEXT

( index )

PRIOR

date_expression

date_constant_name

date_function_call

date_literal

date_variable_name

: indicator_name

: host_variable_name

+

numeric_expression

_

numeric_expression

+

numeric_subexpression

*

/

numeric_subexpression

13-54 PL/SQL User's Guide and Reference

Expressions

Keyword and Parameter Description

BETWEEN

This comparison operator tests whether a value lies in a specified range. It means "greater than or equal to low value and less than or equal to high value."

boolean_constant_name

A constant of type BOOLEAN, which must be initialized to the value TRUE, FALSE, or NULL. Arithmetic operations on Boolean constants are not allowed.

boolean_expression

An expression that returns the Boolean value TRUE, FALSE, or NULL.

boolean_function_call

Any function call that returns a Boolean value.

boolean_literal

The predefined values TRUE, FALSE, or NULL (which stands for a missing, unknown, or inapplicable value). You cannot insert the value TRUE or FALSE into a database column.

boolean_variable_name

A variable of type BOOLEAN. Only the values TRUE, FALSE, and NULL can be assigned to a BOOLEAN variable. You cannot select or fetch column values into a BOOLEAN variable. Also, arithmetic operations on BOOLEAN variables are not allowed.

%BULK_ROWCOUNT

Designed for use with the FORALL statement, this is a composite attribute of the implicit cursor SQL. For more information, see "SQL Cursor" on page 13-131.

character_constant_name

A previously declared constant that stores a character value. It must be initialized to a character value or a value implicitly convertible to a character value.

character_expression

An expression that returns a character or character string.

character_function_call

A function call that returns a character value or a value implicitly convertible to a character value.

character_literal

A literal that represents a character value or a value implicitly convertible to a character value.

character_variable_name

A previously declared variable that stores a character value.

PL/SQL Language Elements 13-55

Expressions

collection_name

A collection (nested table, index-by table, or varray) previously declared within the current scope.

cursor_name

An explicit cursor previously declared within the current scope.

cursor_variable_name

A PL/SQL cursor variable previously declared within the current scope.

date_constant_name

A previously declared constant that stores a date value. It must be initialized to a date value or a value implicitly convertible to a date value.

date_expression

An expression that returns a date/time value.

date_function_call

A function call that returns a date value or a value implicitly convertible to a date value.

date_literal

A literal representing a date value or a value implicitly convertible to a date value.

date_variable_name

A previously declared variable that stores a date value.

EXISTS, COUNT, FIRST, LAST, LIMIT, NEXT, PRIOR

Collection methods. When appended to the name of a collection, these methods return useful information. For example, EXISTS(n) returns TRUE if the nth element of a collection exists. Otherwise, EXISTS(n) returns FALSE. For more information, see "Collection Methods" on page 13-17.

exponent

An expression that must return a numeric value.

%FOUND, %ISOPEN, %NOTFOUND, %ROWCOUNT

Cursor attributes. When appended to the name of a cursor or cursor variable, these attributes return useful information about the execution of a multi-row query. You can also append them to the implicit cursor SQL.

host_cursor_variable_name

A cursor variable declared in a PL/SQL host environment and passed to PL/SQL as a bind variable. Host cursor variables must be prefixed with a colon.

host_variable_name

A variable declared in a PL/SQL host environment and passed to PL/SQL as a bind variable. The datatype of the host variable must be implicitly convertible to the appropriate PL/SQL datatype. Also, host variables must be prefixed with a colon.

13-56 PL/SQL User's Guide and Reference

Expressions

IN

Comparison operator that tests set membership. It means "equal to any member of." The set can contain nulls, but they are ignored. Also, expressions of the form

value NOT IN set

return FALSE if the set contains a null.

index

A numeric expression that must return a value of type BINARY_INTEGER or a value implicitly convertible to that datatype.

indicator_name

An indicator variable declared in a PL/SQL host environment and passed to PL/SQL. Indicator variables must be prefixed with a colon. An indicator variable "indicates" the value or condition of its associated host variable. For example, in the Oracle Precompiler environment, indicator variables can detect nulls or truncated values in output host variables.

IS NULL

Comparison operator that returns the Boolean value TRUE if its operand is null, or FALSE if its operand is not null.

LIKE

Comparison operator that compares a character value to a pattern. Case is significant. LIKE returns the Boolean value TRUE if the character patterns match, or FALSE if they do not match.

NOT, AND, OR

Logical operators, which follow the tri-state logic of Table 2–2 on page 2-18. AND returns the value TRUE only if both its operands are true. OR returns the value TRUE if either of its operands is true. NOT returns the opposite value (logical negation) of its operand. For more information, see "Logical Operators" on page 2-18.

NULL

Keyword that represents a null. It stands for a missing, unknown, or inapplicable value. When NULL is used in a numeric or date expression, the result is a null.

numeric_constant_name

A previously declared constant that stores a numeric value. It must be initialized to a numeric value or a value implicitly convertible to a numeric value.

numeric_expression

An expression that returns an integer or real value.

numeric_function_call

A function call that returns a numeric value or a value implicitly convertible to a numeric value.

numeric_literal

A literal that represents a number or a value implicitly convertible to a number.

PL/SQL Language Elements 13-57

Expressions

numeric_variable_name

A previously declared variable that stores a numeric value.

pattern

A character string compared by the LIKE operator to a specified string value. It can include two special-purpose characters called wildcards. An underscore (_) matches exactly one character; a percent sign (%) matches zero or more characters. The pattern can be followed by ESCAPE 'character_literal', which turns off wildcard expansion wherever the escape character appears in the string followed by a percent sign or underscore.

relational_operator

Operator that compares expressions. For the meaning of each operator, see "Comparison Operators" on page 2-20.

SQL

A cursor opened implicitly by Oracle to process a SQL data manipulation statement. The implicit cursor SQL always refers to the most recently executed SQL statement.

+, -, /, *, **

Symbols for the addition, subtraction, division, multiplication, and exponentiation operators.

||

The concatenation operator. As the following example shows, the result of concatenating string1 with string2 is a character string that contains string1 followed by string2:

'Good' || ' morning!' = 'Good morning!'

The next example shows that nulls have no effect on the result of a concatenation:

'suit' || NULL || 'case' = 'suitcase'

A null string (''), which is zero characters in length, is treated like a null.

Usage Notes

In a Boolean expression, you can only compare values that have compatible datatypes. For more information, see "Converting PL/SQL Datatypes" on page 3-18.

In conditional control statements, if a Boolean expression returns TRUE, its associated sequence of statements is executed. But, if the expression returns FALSE or NULL, its associated sequence of statements is not executed.

The relational operators can be applied to operands of type BOOLEAN. By definition, TRUE is greater than FALSE. Comparisons involving nulls always return a null. The value of a Boolean expression can be assigned only to Boolean variables, not to host variables or database columns. Also, datatype conversion to or from type BOOLEAN is not supported.

You can use the addition and subtraction operators to increment or decrement a date value, as the following examples show:

hire_date := '10-MAY-95';

hire_date := hire_date + 1; -- makes hire_date '11-MAY-95' hire_date := hire_date - 5; -- makes hire_date '06-MAY-95'

13-58 PL/SQL User's Guide and Reference

Expressions

When PL/SQL evaluates a boolean expression, NOT has the highest precedence, AND has the next-highest precedence, and OR has the lowest precedence. However, you can use parentheses to override the default operator precedence.

Within an expression, operations occur in their predefined order of precedence. From first to last (top to bottom), the default order of operations is

parentheses exponents unary operators

multiplication and division

addition, subtraction, and concatenation

PL/SQL evaluates operators of equal precedence in no particular order. When parentheses enclose an expression that is part of a larger expression, PL/SQL evaluates the parenthesized expression first, then uses the result in the larger expression. When parenthesized expressions are nested, PL/SQL evaluates the innermost expression first and the outermost expression last.

Examples

Several examples of expressions follow:

(a + b) > c NOT finished

TO_CHAR(acct_no) 'Fat ' || 'cats' '15-NOV-95'

MONTHS_BETWEEN(d1, d2) pi * r**2 emp_cv%ROWCOUNT

--Boolean expression

--Boolean expression

--character expression

--character expression

--date expression

--date expression

--numeric expression

--numeric expression

Related Topics

Assignment Statement, Constants and Variables, EXIT Statement, IF Statement, LOOP

Statements

PL/SQL Language Elements 13-59

Соседние файлы в папке Oracle 10g