Scope of host variables

The scope of reference, or the scope, of a host variable is that portion of the program in which the host variable can be accessed.

The placement of the declaration statement determines the scope of the variable as follows:
  • If the declaration statement is inside a program block, the variable is local to that program block.

    Only statements within that program block can access the variable.

  • If the declaration statement is outside a program block, the variable is modular.

    All program blocks that occur after the declaration can access the variable.

Host variables that you declare within a block of code are local to that block. You define a block of code with a pair of curly braces, { }.

For example, the host variable blk_int in the following figure is valid only in the block of code between the curly braces, whereas p_int is valid both inside and outside the block.
Figure 1: Declaring host variables inside and outside a code block
EXEC SQL BEGIN DECLARE SECTION;
     int p_int;
EXEC SQL END DECLARE SECTION;
⋮
EXEC SQL select customer_num into :p_int from customer
   where lname = "Miller";
⋮
{
   EXEC SQL BEGIN DECLARE SECTION;
      int blk_int;
   EXEC SQL END DECLARE SECTION;

   blk_int = p_int;
   
⋮
   EXEC SQL select customer_num into :blk_int from customer
      where lname = "Miller";
⋮
}

You can nest blocks up to 16 levels. The global level counts as level one.

The following C rules govern the scope of host variables as well:
  • A host variable is an automatic variable unless you explicitly define it as an external or static variable or unless it is defined outside of any function.
  • A host variable that a function declares is local to that function and masks a definition with the same name outside the function.
  • You cannot define a host variable more than once in the same block of code.