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

Literals

Literals

A literal is an explicit numeric, character, string, or Boolean value not represented by an identifier. The numeric literal 135 and the string literal 'hello world' are examples. For more information, see "Literals" on page 2-4.

Syntax

numeric_literal

 

 

 

+

 

 

 

_

integer

 

 

 

 

 

 

real_number

 

integer

 

 

 

digit

 

 

 

real_number

 

+

 

_

 

.

integer

 

E

integer

 

integer

 

e

 

.

 

 

.

integer

 

 

character_literal

character

’’

string_literal

character

’’

boolean_literal

TRUE

FALSE

NULL

Keyword and Parameter Description

character

A member of the PL/SQL character set. For more information, see "Character Set" on page 2-1.

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

Literals

digit

One of the numerals 0 .. 9.

TRUE, FALSE, NULL

A predefined Boolean value.

Usage Notes

Two kinds of numeric literals can be used in arithmetic expressions: integers and reals. Numeric literals must be separated by punctuation. Spaces can be used in addition to the punctuation.

A character literal is an individual character enclosed by single quotes (apostrophes). Character literals include all the printable characters in the PL/SQL character set: letters, numerals, spaces, and special symbols.

PL/SQL is case sensitive within character literals. For example, PL/SQL considers the literals 'Q' and 'q' to be different.

A string literal is a sequence of zero or more characters enclosed by single quotes. The null string ('') contains zero characters. A string literal can hold up to 32,767 characters.

To represent an apostrophe within a string, enter two single quotes instead of one. For literals where doubling the quotes is inconvenient or hard to read, you can designate an escape character using the notation q'esc_char ... esc_char'. This escape character must not occur anywhere else inside the string.

PL/SQL is case sensitive within string literals. For example, PL/SQL considers the literals 'white' and 'White' to be different.

Trailing blanks are significant within string literals, so 'abc' and 'abc ' are different. Trailing blanks in a string literal are not trimmed during PL/SQL processing, although they are trimmed if you insert that value into a table column of type CHAR.

The Boolean values TRUE and FALSE cannot be inserted into a database column.

Examples

Several examples of numeric literals are:

25 6.34 7E2 25e-03 .1 1. +17 -4.4 -4.5D -4.6F

Several examples of character literals are:

'H' '&' ' ' '9' ']' 'g'

Several examples of string literals are:

'$5,000' '02-AUG-87'

'Don''t leave until you''re ready and I''m ready.' q'#Don't leave until you're ready and I'm ready.#'

Related Topics

Constants and Variables, Expressions

PL/SQL Language Elements 13-77

LOCK TABLE Statement

LOCK TABLE Statement

The LOCK TABLE statement locks entire database tables in a specified lock mode. That enables you to share or deny access to tables while maintaining their integrity. For more information, see "Using LOCK TABLE" on page 6-33.

Oracle has extensive automatic features that allow multiple programs to read and write data simultaneously, while each program sees a consistent view of the data; you should rarely, if ever, need to lock tables yourself.

Syntax

lock_table_statement

 

 

 

 

 

 

,

 

 

 

NOWAIT

 

 

 

 

 

LOCK TABLE

table_reference

IN

lock_mode

MODE

;

Keyword and Parameter Description

table_reference

A table or view that must be accessible when you execute the LOCK TABLE statement. For the syntax of table_reference, see "DELETE Statement" on page 13-41.

lock_mode

The type of lock. It must be one of the following: ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE, SHARE, SHARE ROW EXCLUSIVE, or EXCLUSIVE.

NOWAIT

This optional keyword tells Oracle not to wait if the table has been locked by another user. Control is immediately returned to your program, so it can do other work before trying again to acquire the lock.

Usage Notes

If you omit the keyword NOWAIT, Oracle waits until the table is available; the wait has no set limit. Table locks are released when your transaction issues a commit or rollback.

A table lock never keeps other users from querying a table, and a query never acquires a table lock.

If your program includes SQL locking statements, make sure the Oracle users requesting locks have the privileges needed to obtain the locks. Your DBA can lock any table. Other users can lock tables they own or tables for which they have a privilege, such as SELECT, INSERT, UPDATE, or DELETE.

Example

The following statement locks the accts table in shared mode:

LOCK TABLE accts IN SHARE MODE;

Related Topics

COMMIT Statement, ROLLBACK Statement

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

LOOP Statements

LOOP Statements

LOOP statements execute a sequence of statements multiple times. The LOOP and END LOOP keywords enclose the statements. PL/SQL provides four kinds of loop statements: basic loop, WHILE loop, FOR loop, and cursor FOR loop. For usage information, see "Controlling Loop Iterations: LOOP and EXIT Statements" on page 4-6.

Syntax

basic_loop_statement

 

 

 

 

<<

label_name

>>

 

 

label_name

 

 

LOOP

statement

END LOOP

;

while_loop_statement

<< label_name >>

WHILE boolean_expression

label_name

LOOP

statement

END LOOP

;

for_loop_statement

<< label_name >>

FOR index_name IN

REVERSE

lower_bound .. upper_bound

label_name

LOOP

statement

END LOOP

;

cursor_for_loop_statement

 

 

 

<<

label_name

>>

 

 

 

 

FOR

record_name

IN

 

 

 

,

 

 

(

cursor_parameter_name

)

cursor_name

 

 

 

(

select_statement

)

 

 

 

 

 

label_name

 

LOOP

statement

END LOOP

 

;

PL/SQL Language Elements 13-79

LOOP Statements

Keyword and Parameter Description

basic_loop_statement

A loop that executes an unlimited number of times. It encloses a sequence of statements between the keywords LOOP and END LOOP. With each iteration, the sequence of statements is executed, then control resumes at the top of the loop. An EXIT, GOTO, or RAISE statement branches out of the loop. A raised exception also ends the loop.

boolean_expression

An expression that returns the Boolean value TRUE, FALSE, or NULL. It is associated with a sequence of statements, which is executed only if the expression returns TRUE. For the syntax of boolean_expression, see "Expressions" on page 13-52.

cursor_for_loop_statement

Issues a SQL query and loops through the rows in the result set. This is a convenient technique that makes processing a query as simple as reading lines of text in other programming languages.

A cursor FOR loop implicitly declares its loop index as a %ROWTYPE record, opens a cursor, repeatedly fetches rows of values from the result set into fields in the record, and closes the cursor when all rows have been processed.

cursor_name

An explicit cursor previously declared within the current scope. When the cursor FOR loop is entered, cursor_name cannot refer to a cursor already opened by an OPEN statement or an enclosing cursor FOR loop.

cursor_parameter_name

A variable declared as the formal parameter of a cursor. (For the syntax of cursor_parameter_declaration, see "Cursors" on page 13-38.) A cursor parameter can appear in a query wherever a constant can appear. The formal parameters of a cursor must be IN parameters.

for_loop_statement

Numeric FOR loops iterate over a specified range of integers. The range is part of an iteration scheme, which is enclosed by the keywords FOR and LOOP.

The range is evaluated when the FOR loop is first entered and is never re-evaluated. The loop body is executed once for each integer in the range defined by lower_bound..upper_bound. After each iteration, the loop index is incremented.

index_name

An undeclared identifier that names the loop index (sometimes called a loop counter). Its scope is the loop itself; you cannot reference the index outside the loop.

The implicit declaration of index_name overrides any other declaration outside the loop. To refer to another variable with the same name, use a label:

<<main>> DECLARE

num NUMBER; BEGIN

...

FOR num IN 1..10 LOOP

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

LOOP Statements

IF main.num > 5 THEN

-- refers to the variable num,

...

-- not to the loop index

END IF;

 

END LOOP;

 

END main;

 

Inside a loop, the index is treated like a constant: it can appear in expressions, but cannot be assigned a value.

label_name

An optional undeclared identifier that labels a loop. label_name must be enclosed by double angle brackets and must appear at the beginning of the loop. Optionally, label_name (not enclosed in angle brackets) can also appear at the end of the loop.

You can use label_name in an EXIT statement to exit the loop labelled by label_name. You can exit not only the current loop, but any enclosing loop.

You cannot reference the index of a FOR loop from a nested FOR loop if both indexes have the same name, unless the outer loop is labeled by label_name and you use dot notation:

label_name.index_name

The following example compares two loop indexes that have the same name, one used by an enclosing loop, the other by a nested loop:

<<outer>>

FOR ctr IN 1..20 LOOP

...

<<inner>>

FOR ctr IN 1..10 LOOP

IF outer.ctr > ctr THEN ...

END LOOP inner; END LOOP outer;

lower_bound .. upper_bound

Expressions that return numbers. (Otherwise, PL/SQL raises the predefined exception VALUE_ERROR.) The expressions are evaluated only when the loop is first entered. The lower bound need not be 1, as the example below shows. The loop counter increment (or decrement) must be 1.

FOR i IN -5..10 LOOP

...

END LOOP;

Internally, PL/SQL assigns the values of the bounds to temporary PLS_INTEGER variables, and, if necessary, rounds the values to the nearest integer. The magnitude range of a PLS_INTEGER is +/- 2**31. If a bound evaluates to a number outside that range, you get a numeric overflow error when PL/SQL attempts the assignment.

By default, the loop index is assigned the value of lower_bound. If that value is not greater than the value of upper_bound, the sequence of statements in the loop is executed, then the index is incremented. If the value of the index is still not greater than the value of upper_bound, the sequence of statements is executed again. This process repeats until the value of the index is greater than the value of upper_bound. At that point, the loop completes.

PL/SQL Language Elements 13-81

LOOP Statements

record_name

An implicitly declared record. The record has the same structure as a row retrieved by cursor_name or select_statement.

The record is defined only inside the loop. You cannot refer to its fields outside the loop. The implicit declaration of record_name overrides any other declaration outside the loop. You cannot refer to another record with the same name inside the loop unless you qualify the reference using a block label.

Fields in the record store column values from the implicitly fetched row. The fields have the same names and datatypes as their corresponding columns. To access field values, you use dot notation, as follows:

record_name.field_name

Select-items fetched from the FOR loop cursor must have simple names or, if they are expressions, must have aliases. In the following example, wages is an alias for the select item sal+NVL(comm,0):

CURSOR c1 IS SELECT empno, sal+comm wages, job ...

REVERSE

By default, iteration proceeds upward from the lower bound to the upper bound. If you use the keyword REVERSE, iteration proceeds downward from the upper bound to the lower bound.

An example follows:

FOR i IN REVERSE 1..10 LOOP -- i starts at 10, ends at 1 -- statements here execute 10 times

END LOOP;

The loop index is assigned the value of upper_bound. If that value is not less than the value of lower_bound, the sequence of statements in the loop is executed, then the index is decremented. If the value of the index is still not less than the value of lower_bound, the sequence of statements is executed again. This process repeats until the value of the index is less than the value of lower_bound. At that point, the loop completes.

select_statement

A query associated with an internal cursor unavailable to you. Its syntax is like that of select_into_statement without the INTO clause. See "SELECT INTO Statement" on page 13-123. PL/SQL automatically declares, opens, fetches from, and closes the internal cursor. Because select_statement is not an independent statement, the implicit cursor SQL does not apply to it.

while_loop_statement

The WHILE-LOOP statement associates a Boolean expression with a sequence of statements enclosed by the keywords LOOP and END LOOP. Before each iteration of the loop, the expression is evaluated. If the expression returns TRUE, the sequence of statements is executed, then control resumes at the top of the loop. If the expression returns FALSE or NULL, the loop is bypassed and control passes to the next statement.

Usage Notes

You can use the EXIT WHEN statement to exit any loop prematurely. If the Boolean expression in the WHEN clause returns TRUE, the loop is exited immediately.

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

LOOP Statements

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

Example

The following cursor FOR loop calculates a bonus, then inserts the result into a database table:

DECLARE

bonus REAL;

CURSOR c1 IS SELECT empno, sal, comm FROM emp; BEGIN

FOR c1rec IN c1 LOOP

bonus := (c1rec.sal * 0.05) + (c1rec.comm * 0.25); INSERT INTO bonuses VALUES (c1rec.empno, bonus);

END LOOP;

COMMIT;

END;

Related Topics

Cursors, EXIT Statement, FETCH Statement, OPEN Statement, %ROWTYPE Attribute

PL/SQL Language Elements 13-83

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