HP 3000 Manuals

GENPLAN [ ALLBASE/SQL Reference Manual ] MPE/iX 5.5 Documentation


ALLBASE/SQL Reference Manual

GENPLAN 

The GENPLAN statement places the access plan generated by the optimizer
for a SELECT, UPDATE, or DELETE statement into the pseudotable
SYSTEM.PLAN. You can then view the access plan by issuing the following
statement from within the same transaction:

     isql=> SELECT * FROM SYSTEM.PLAN; 

Scope 

ISQL or Application Programs

SQL Syntax 
[REV BEG]

GENPLAN [WITH (HostVariableDefinition )] FOR

{SQLStatement                                           }
{MODULE SECTION [Owner.]ModuleName(Section Number)      }
{PROCEDURE SECTION [Owner.]ProcedureName(Section Number)}
[REV END]

Parameters 

WITH                    is used when simulating embedded statements taken
                        from application programs.  The WITH clause
                        defines variables of a specified data type.  The
                        variables are used in the WHERE clause where an
                        input host variable would appear if the
                        SQLStatement were embedded in an application.[REV
                        BEG]

HostVariableDefinition  designates a variable used to simulate a host
                        variable that would appear in a statement in an
                        application program.  This clause is only allowed
                        for an SQLStatement.

SQLStatement            can be any valid SQL SELECT, UPDATE, or DELETE
                        statement including complex statements containing
                        UNION, OUTER JOIN, or nested subqueries.

[Owner].ModuleName      identifies the module section whose access plan
(Section Number)        is to be generated.  The owner name is the
                        DBEUserID of the person who preprocessed the
                        program or the owner name specified when the
                        program was preprocessed.  The Module Name is the
                        name stored in the CATALOG.SECTION view.

[Owner.]ProcedureName   identifies the procedure section whose access
(Section Number)        plan is to be generated.  The owner name is the
                        DBEUserID of the person who created the procedure
                        or the owner name specified when the procedure
                        was created.  The ProcedureName is the name
                        stored in the CATALOG.PROCEDURE view or
                        CATALOG.SECTION view.[REV END]

Description 

   *   The GENPLAN statement can only be used in ISQL. It cannot be used
       in an application, in a static SQL statement, or in dynamic
       preprocessing.

       _________________________________________________________________ 

       NOTE  GENPLAN checks only for syntax errors.  It does not check
             for mismatched data types or other errors that may occur.
             In order to guarantee complete error checking, do not
             include a statement in GENPLAN unless it has previously run
             without errors.

       _________________________________________________________________ 

   *   You should take the following steps when embedding a statement
       from an application in the GENPLAN statement:
          *   In the GENPLAN WITH clause, define variable names and
              compatible SQL data types for each input host variable
              appearing in the application statement.  Do not include
              indicator variables in the WITH clause for columns that
              allow nulls.  Indicator variables are not used by GENPLAN.
          *   Remove the INTO clause and its associated output host
              variables.  Only input host variables are considered when
              generating the access plan.

   *   The following language specific tables show the SQL data type that
       must be placed in the WITH clause of the GENPLAN statement for
       each type of host variable, if an accurate access plan is to be
       generated.  In some cases, the data type specified in the WITH
       clause of the GENPLAN statement is not the same data type which is
       compatible with the SQL data type of the column containing the
       data.  The data type specified below must be used, regardless of
       the SQL column data type.  This ensures that the plan displayed by
       the GENPLAN statement is the same as the plan chosen by the
       optimizer when the statement is preprocessed in an application.

          Table 10-3.  GENPLAN WITH Clause Data Types--COBOL 

-------------------------------------------------------------------
|                                      |                          |
|         COBOL Host Variable          |   GENPLAN WITH Clause    |
|        Data Type Declaration         |      SQL Data Type       |
|                                      |                          |
-------------------------------------------------------------------
|                                      |                          |
| 01 DATA-NAME PIC X.                  | CHAR                     |
|                                      |                          |
| 01 DATA-NAME PIC X(n).               | CHAR(n)                  |
|                                      |                          |
| 01 GROUP-NAME.                       | VARCHAR(n)               |
|                                      |                          |
|     49 LENGTH-NAME PIC S9(9) COMP.   |                          |
|                                      |                          |
|     49 VALUE-NAME PIC X(n).          |                          |
|                                      |                          |
| 01 DATA-NAME PIC S9(4) COMP.         | SMALLINT                 |
|                                      |                          |
| 01 DATA-NAME PIC S9(9) COMP.         | INTEGER                  |
|                                      |                          |
| 01 DATA-NAME PIC S9(p-s)V9(s) COMP-3.| DECIMAL(p,s)             |
|                                      |                          |
-------------------------------------------------------------------

          Table 10-4.  GENPLAN WITH Clause Data Types--Pascal 

-------------------------------------------------------------------
|                                      |                          |
|         Pascal Host Variable         |   GENPLAN WITH Clause    |
|        Data Type Declaration         |      SQL Data Type       |
|                                      |                          |
-------------------------------------------------------------------
|                                      |                          |
| DataName :  char;                    | CHAR                     |
|                                      |                          |
| DataName :  array [1..n] of char;    | CHAR(n)                  |
|                                      |                          |
| DataName :  packed array [1..n] of char;HAR(n)                  |
|                                      |                          |
| DataName :  string[n];               | VARCHAR(n)               |
|                                      |                          |
| DataName :  smallint;                | SMALLINT                 |
|                                      |                          |
| DataName :  integer;                 | INTEGER                  |
|                                      |                          |
| DataName :  longreal;                | FLOAT                    |
|                                      |                          |
| DataName :  real;                    | REAL                     |
|                                      |                          |
-------------------------------------------------------------------

          Table 10-5.  GENPLAN WITH Clause Data Types--FORTRAN 

-------------------------------------------------------------------
|                                      |                          |
|        FORTRAN Host Variable         |   GENPLAN WITH Clause    |
|        Data Type Declaration         |      SQL Data Type       |
|                                      |                          |
-------------------------------------------------------------------
|                                      |                          |
| CHARACTER DataName                   | CHAR                     |
|                                      |                          |
| CHARACTER*n DataName                 | CHAR(n)                  |
|                                      |                          |
| INTEGER*2 DataName                   | SMALLINT                 |
|                                      |                          |
| INTEGER DataName                     | INTEGER                  |
|                                      |                          |
| REAL DataName                        | REAL                     |
|                                      |                          |
| REAL*4 DataName                      | REAL                     |
|                                      |                          |
| DOUBLE PRECISION DataName            | FLOAT                    |
|                                      |                          |
| REAL*8 DataName                      | FLOAT                    |
|                                      |                          |
-------------------------------------------------------------------

          Table 10-6.  GENPLAN WITH Clause Data Types--C 

-------------------------------------------------------------------
|                                      |                          |
|           C Host Variable            |   GENPLAN WITH Clause    |
|        Data Type Declaration         |      SQL Data Type       |
|                                      |                          |
-------------------------------------------------------------------
|                                      |                          |
| char dataname;                       | CHAR                     |
|                                      |                          |
| char dataname[n+1];                  | VARCHAR(n)               |
|                                      |                          |
| short dataname;                      | SMALLINT                 |
|                                      |                          |
| short int dataname;                  | SMALLINT                 |
|                                      |                          |

| int dataname;                        | INTEGER                  |
|                                      |                          |
| long int dataname;                   | INTEGER                  |
|                                      |                          |
| long dataname;                       | INTEGER                  |
|                                      |                          |
| float dataname;                      | REAL                     |
|                                      |                          |
| double dataname;                     | FLOAT                    |
|                                      |                          |
-------------------------------------------------------------------

       _________________________________________________________________ 

       NOTE  It is your responsibility to ensure that for each simulated
             host variable defined in the GENPLAN statement WITH clause,
             you use the SQL data type shown in the tables.  If you use
             an incorrect data type, GENPLAN will generate a plan.
             However, it may not be the plan the optimizer will choose
             when your application is preprocessed.

       _________________________________________________________________ 

   *   For each individual session, SYSTEM.PLAN stores the result of only
       one GENPLAN at a time.  If GENPLAN is issued twice in succession,
       the second plan will replace the first.  The access plan generated
       by GENPLAN is removed from SYSTEM.PLAN as soon as a COMMIT WORK or
       ROLLBACK WORK statement is issued.[REV BEG]

   *   GENPLAN can be applied to a type II insert query.

   *   The active SETOPT will be used for the statement of GENPLAN on an
       SQLStatement only.  A currently active SETOPT is ignored if a
       GENPLAN statement is executed on a section.

   *   You can find the section number from the source file produced by
       the preprocessor after the application is processed.

   *   Use the following information to find the section number for a
       procedure statement:

          *   A section exists for each SQL statement in a procedure
              except:
                 *   BEGIN WORK
                 *   ROLLBACK WORK
                 *   SAVEPOINT
                 *   OPEN cursor
                 *   CLOSE cursor

          *   Procedure sections are numbered consecutively, starting
              with 1, from the start of the procedure, with no regard to
              any branching or looping constructs in the procedure.
       [REV END]

   *   Multiple sessions may issue the GENPLAN statement at the same time
       because each session has its own individual copy of SYSTEM.PLAN.

   *   See the section "Using GENPLAN to Display the Access Plan" in the
       "SQL Queries" chapter for information on how to interpret the
       plan.

   *   You cannot use GENPLAN with the SYSTEM or CATALOG views. 

Authorization 

To execute GENPLAN, you must have DBA authority or the appropriate
combination of SELECT, UPDATE, or DELETE authorities for the tables and
views accessed by the included SQL statement.  In the case of views, you
must have the appropriate authorities for all underlying views and base
tables, as well.

Examples 

   1.  Interactive SQL statement for the following query:

            >isql=> SELECT PartName, VendorNumber, UnitPrice 
            > FROM Purchdb.Parts p, PurchDB.SupplyPrice sp 
            > WHERE p.PartNumber = sp.PartNumber 
            > AND p.PartNumber = '1123-P-01'; 

       Generate the Plan:

            isql=> GENPLAN FOR 
            > SELECT partname, vendornumber, UnitPrice 
            > FROM PurchDB.Parts p, PurchDB.SupplyPrice sp 
            > WHERE p.PartNumber = sp.PartNumber 
            > AND p.PartNumber = '1123-P-01'; 

       Display the Plan:

            isql=> SELECT * FROM System.Plan; 

            SELECT * FROM System.Plan;
            -----------+-----------+-----------+--------------------+------------------
            QUERYBLOCK |STEP       |LEVEL      |OPERATION           |TABLENAME
            -----------+-----------+-----------+--------------------+------------------
                      1|          1|          2|index scan          |PARTS
                      1|          2|          2|serial scan         |SUPPLYPRICE
                      1|          3|          1|nestedloop join     |
            ---------------------------------------------------------------------------
            Number of rows selected is 3
            U[p], d[own], l[eft], r[ight], t[op], b[ottom], pr[int], <n>, or e[nd] >r

            +--------------------+----------------
            |OWNER               |INDEXNAME
            +--------------------+----------------
            |PURCHDB             |PARTNUMINDEX
            |PURCHDB             |
            |                    |
            ---------------------------------------------------------------------------
            Number of rows selected is 3
            U[p], d[own], l[eft], r[ight], t[op], b[ottom], pr[int], <n>, or e[nd] >e

   2.  SQL statement simulating use of host variables in an application
       for the following query taken from an application:

            EXEC SQL SELECT PartName, VendorNumber, UnitPrice
                       INTO :PartName, :VendorNumber, :UnitPrice
                       FROM PurchDB.Parts p, PurchDB.SupplyPrice sp
                      WHERE p.PartNumber = sp.PartNumber
                        AND p.PartNumber = :PartNumber

       Remove INTO clause when placing the statement into GENPLAN.

       Generate the plan in ISQL:

       Define input host variable names and compatible SQL data types in
       WITH clause.

            isql=> GENPLAN WITH (PartNumber char(16)) FOR 
            > SELECT PartName, VendorNumber, UnitPrice 
            >   FROM PurchDB.Parts p, PurchDB.SupplyPrice sp 
            >  WHERE p.PartNumber = sp.PartNumber 
            >    AND p.PartNumber = :PartNumber; 

       Display the plan:

            isql=> SELECT * FROM System.Plan; 

            SELECT * FROM System.Plan;
            -----------+-----------+-----------+--------------------+------------------
            QUERYBLOCK |STEP       |LEVEL      |OPERATION           |TABLENAME
            -----------+-----------+-----------+--------------------+------------------
                      1|          1|          2|index scan          |PARTS
                      1|          2|          2|serial scan         |SUPPLYPRICE
                      1|          3|          1|nestedloop join     |
            ---------------------------------------------------------------------------
            Number of rows selected is 3
            U[p], d[own], l[eft], r[ight], t[op], b[ottom], pr[int], <n>, or e[nd] >r

            +--------------------+----------------
            |OWNER               |INDEXNAME
            +--------------------+----------------
            |PURCHDB             |PARTNUMINDEX
            |PURCHDB             |
            |                    |
            ---------------------------------------------------------------------------
            Number of rows selected is 3
            U[p], d[own], l[eft], r[ight], t[op], b[ottom], pr[int], <n>, or e[nd] >e
       [REV BEG]

   3.  Example of GENPLAN for a MODULE SECTION.

            GENPLAN FOR MODULE SECTION MyModule(10);
[REV END]



MPE/iX 5.5 Documentation