Scope and visibility- pl/sql, PL-SQL Programming

Scope and Visibility

The References to an identifier are resolved according to its visibility and scope. The scope of an identifier is that area of a program unit (subprogram, block, or package) from which you can reference the identifier. An identifier is visible only in the areas from which you can reference the identifier using an unqualified name. The Figure shows the visibility and scope of a variable named x that is declared in an enclosing block, and then re-declared in a sub-block.

The Identifiers declared in a PL/SQL block are considered local to that block and global to all its sub-blocks. If a global identifier is re-declared in a sub-block, both the identifiers remain in the scope. Within the sub-block, though, only the local identifier is visible as you must use a qualified name to reference the global identifier.

Though you cannot declare an identifier twice in the similar block, you can declare the same identifier in two various blocks. The two items represented by the identifier are discrete, and any change in one does not affect the other. Though, a block cannot reference the identifiers declared in other blocks at the similar level as these identifiers are neither global nor local to the block.

 

2006_Scope and Visibility.jpg

 

                                          Figure: Scope and Visibility




The example below describes the scope rules. Note that the identifiers declared in one sub-block cannot be referenced in another sub-block. That is because the block cannot reference the identifiers declared in another blocks nested at similar level.


DECLARE
a CHAR;
b REAL;
BEGIN

-- identifiers available here: a (CHAR), b
DECLARE
a INTEGER;
c REAL;
BEGIN
-- identifiers available here: a (INTEGER), b, c
END;
DECLARE
d REAL;
BEGIN
-- identifiers available here: a (CHAR), b, d
END;
-- identifiers available here: a (CHAR), b
END;


Remember that the global identifiers can be re-declared in a sub-block, in that case the local declaration prevails and the sub-block cannot reference the global identifier unless you use a qualified name. The qualifier can be the label of an enclose block, as the example below shows:


<>
DECLARE
birthdate DATE;
BEGIN
DECLARE
birthdate DATE;
BEGIN
...
IF birthdate = outer.birthdate THEN...


As the next illustration shown below, the qualifier can also be the name of an enclosing subprogram:


PROCEDURE check_credit (...) IS
rating NUMBER;
FUNCTION valid (...) RETURN BOOLEAN IS
rating NUMBER;
BEGIN
...
IF check_credit.rating < 3 THEN...


Though, within the same scope, a label and a subprogram cannot have the similar name.

Posted Date: 10/3/2012 5:01:20 AM | Location : United States







Related Discussions:- Scope and visibility- pl/sql, Assignment Help, Ask Question on Scope and visibility- pl/sql, Get Answer, Expert's Help, Scope and visibility- pl/sql Discussions

Write discussion on Scope and visibility- pl/sql
Your posts are moderated
Related Questions
%TYPE: This attribute gives the datatype of a formerly declared collection, cursor variable, object, field, record, database column, or variable. Datatype: This is simply

Project Description: I want to rebuild it and add better content to it It will include up to 5 forms The data will be saved on SQL server and the data access layer could b

Recursion versus Iteration Dissimilar the iteration, recursion is not crucial to PL/SQL programming. Any problem which can be solved using recursion can be solving using the it

Complete the following steps to create a procedure to calculate the tax on an order. The BB_TAX table contains the states that require taxes to be submitted for Internet sales. If

Procedures The procedure is a subprogram which can take parameters and be invoked. Normally, you can use a procedure to perform an action. The procedure has 2 sections: the spe

Authorisations - Privileges As relational theory is silent on the issue of authorisation, it offers nothing with which SQL's vast edifice in support of what it calls privilege

Seeking a programmer to design a legal document with pre-existing fields that could allow the auto-population of client(s) information (i.e. Name, Account Number, Address etc.) int

which operation is used if we are interested in only certain columns of a table?

Pass the nulls to a dynamic SQL: Passing Nulls: Assume that you want to pass the nulls to a dynamic SQL statement. For illustration, you may write the EXECUTE IMMEDIATE

IN Operator The operator IN tests the set membership. This means "equal to any member of." The set may have nulls, but they are ignored. For illustration, the statement below do