Skip Headers

PL/SQL User's Guide and Reference
10g Release 1 (10.1)

Part Number B10807-01
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Index
Index
Go to Master Index
Master Index
Go to Feedback page
Feedback

Go to previous page
Previous
Go to next page
Next
View PDF

Blocks

The basic program unit in PL/SQL is the block. A PL/SQL block is defined by the keywords DECLARE, BEGIN, EXCEPTION, and END. These keywords partition the block into a declarative part, an executable part, and an exception-handling part. Only the executable part is required. You can nest a block within another block wherever you can place an executable statement. For more information, see "Block Structure" and "Scope and Visibility of PL/SQL Identifiers".

Syntax

Description of plsql_block.gif follows
Description of the illustration plsql_block.gif

Description of item_declaration.gif follows
Description of the illustration item_declaration.gif

Description of sql_statement.gif follows
Description of the illustration sql_statement.gif

Description of statement.gif follows
Description of the illustration statement.gif

Keyword and Parameter Description


base_type

Any scalar or user-defined PL/SQL datatype specifier such as CHAR, DATE, or RECORD.


BEGIN

Signals the start of the executable part of a PL/SQL block, which contains executable statements. A PL/SQL block must contain at least one executable statement (even just the NULL statement).


collection_declaration

Declares a collection (index-by table, nested table, or varray). For the syntax of collection_declaration, see "Collections".


constant_declaration

Declares a constant. For the syntax of constant_declaration, see "Constants and Variables".


constraint

Applies only to datatypes that can be constrained such as CHAR and NUMBER. For character datatypes, this specifies a maximum size in bytes. For numeric datatypes, this specifies a maximum precision and scale.


cursor_declaration

Declares an explicit cursor. For the syntax of cursor_declaration, see "Cursors".


cursor_variable_declaration

Declares a cursor variable. For the syntax of cursor_variable_declaration, see "Cursor Variables".


DECLARE

Signals the start of the declarative part of a PL/SQL block, which contains local declarations. Items declared locally exist only within the current block and all its sub-blocks and are not visible to enclosing blocks. The declarative part of a PL/SQL block is optional. It is terminated implicitly by the keyword BEGIN, which introduces the executable part of the block.

PL/SQL does not allow forward references. You must declare an item before referencing it in any other statements. Also, you must declare subprograms at the end of a declarative section after all other program items.


END

Signals the end of a PL/SQL block. It must be the last keyword in a block. Remember, END does not signal the end of a transaction. Just as a block can span multiple transactions, a transaction can span multiple blocks.


EXCEPTION

Signals the start of the exception-handling part of a PL/SQL block. When an exception is raised, normal execution of the block stops and control transfers to the appropriate exception handler. After the exception handler completes, execution proceeds with the statement following the block.

If there is no exception handler for the raised exception in the current block, control passes to the enclosing block. This process repeats until an exception handler is found or there are no more enclosing blocks. If PL/SQL can find no exception handler for the exception, execution stops and an unhandled exception error is returned to the host environment. For more information, see Chapter 10.


exception_declaration

Declares an exception. For the syntax of exception_declaration, see "Exceptions".


exception_handler

Associates an exception with a sequence of statements, which is executed when that exception is raised. For the syntax of exception_handler, see "Exceptions".


function_declaration

Declares a function. For the syntax of function_declaration, see "Functions".


label_name

An undeclared identifier that optionally labels a PL/SQL block. If used, label_name must be enclosed by double angle brackets and must appear at the beginning of the block. Optionally, label_name (not enclosed by angle brackets) can also appear at the end of the block.

A global identifier declared in an enclosing block can be redeclared in a sub-block, in which case the local declaration prevails and the sub-block cannot reference the global identifier unless you use a block label to qualify the reference, as the following example shows:

<<outer>>
DECLARE
   x INTEGER;
BEGIN
   DECLARE
      x INTEGER;
   BEGIN
      IF x = outer.x THEN  -- refers to global x
         NULL;
      END IF;
   END;
END outer;
/

object_declaration

Declares an instance of an object type. For the syntax of object_declaration, see "Object Types".


procedure_declaration

Declares a procedure. For the syntax of procedure_declaration, see "Procedures".


record_declaration

Declares a user-defined record. For the syntax of record_declaration, see "Records".


statement

An executable (not declarative) statement that. A sequence of statements can include procedural statements such as RAISE, SQL statements such as UPDATE, and PL/SQL blocks.

PL/SQL statements are free format. That is, they can continue from line to line if you do not split keywords, delimiters, or literals across lines. A semicolon (;) serves as the statement terminator.


subtype_name

A user-defined subtype that was defined using any scalar or user-defined PL/SQL datatype specifier such as CHAR, DATE, or RECORD.


variable_declaration

Declares a variable. For the syntax of variable_declaration, see "Constants and Variables".

PL/SQL supports a subset of SQL statements that includes data manipulation, cursor control, and transaction control statements but excludes data definition and data control statements such as ALTER, CREATE, GRANT, and REVOKE.

Example

The following PL/SQL block declares some variables, executes statements with calculations and function calls, and handles errors that might occur:

DECLARE
   numerator   NUMBER := 22;
   denominator NUMBER := 7;
   the_ratio   NUMBER;
BEGIN
   the_ratio := numerator/denominator;
   dbms_output.put_line('Ratio = ' || the_ratio);
EXCEPTION
   WHEN ZERO_DIVIDE THEN
      dbms_output.put_line('Divide-by-zero error: can''t divide ' ||
         numerator || ' by ' || denominator);
   WHEN OTHERS THEN
      dbms_output.put_line('Unexpected error.');
END;
/

Related Topics

Constants and Variables, Exceptions, Functions, Procedures