HP 3000 Manuals

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


ALLBASE/SQL Reference Manual

FETCH 

The FETCH statement advances the position of an opened cursor to the next
row of the active set and copies selected columns into the specified host
variables or data buffer.  The row to which the cursor points is called
the current row.

Scope 

Application Programs Only

SQL Syntax 

                        {INTO HostVariableSpecification    }
                        {      {[SQL]DESCRIPTOR {SQLDA   }}}
[BULK] FETCH CursorName {USING {                {AreaName}}}
                        {      {                          }}
                        {      {HostVariableSpecification }}
Parameters 

BULK                      is specified in an application program to
                          retrieve multiple rows with a single execution
                          of the FETCH statement.  After a BULK FETCH
                          statement, the current row is the last row
                          fetched.

                          BULK can be specified with the INTO clause (for
                          a statically executed cursor), but not with the
                          USING clause (for a dynamically executed
                          cursor).

                          BULK is disallowed in a procedure.

CursorName                identifies a cursor.  The cursor's active set,
                          determined when the cursor was opened, and the
                          cursor's current position in the active set
                          determine the data to be returned by each
                          successive FETCH statement.

INTO                      The INTO clause defines where to place rows
                          fetched for a statically preprocessed SELECT or
                          EXECUTE PROCEDURE statement.

USING                     The USING clause defines where to place rows
                          fetched for a dynamically preprocessed SELECT
                          or EXECUTE PROCEDURE statement, or for a
                          statically preprocessed EXECUTE PROCEDURE
                          statement with an unknown format.

HostVariableSpecification identifies one or more host variables for
                          holding and describing the row(s) in the active
                          set.

                          When used with the INTO clause, the syntax of
                          HostVariableSpecification depends on whether
                          the BULK option is specified.  If BULK is
                          specified, HostVariableSpecification identifies
                          an array that holds the rows fetched.  If BULK
                          is not specified, the host variable declaration
                          identifies a list of individual host variables.
                          The syntax of BULK and non-BULK variable
                          declarations is shown in separate sections
                          below.

                          The USING clause with a
                          HostVariableSpecification allows non-BULK
                          variable declarations only.

DESCRIPTOR                The DESCRIPTOR identifier defines where to
                          place rows selected in accord with a
                          dynamically preprocessed SELECT or EXECUTE
                          PROCEDURE statement that has been described by
                          a DESCRIBE statement.  For a select cursor,
                          specify the same location (SQLDA, area name, or
                          host variable) as you specified in the DESCRIBE
                          statement.  For a procedure cursor, specify the
                          same location you specified in the ADVANCE
                          statement or DESCRIBE RESULT statement (for a
                          procedure created WITH RESULT).

SQLDA                     specifies that a data structure of sqlda_type
                          named sqlda is to be used to pass information
                          about the prepared statement between the
                          application and ALLBASE/SQL.

AreaName                  specifies the user defined name of a data
                          structure of sqlda_type that is to be used to
                          pass information about the prepared statement
                          between the application and ALLBASE/SQL.

SQL Syntax--BULK HostVariableSpecification 

:Buffer [,:StartIndex [,:NumberOfRows]]

Parameters--BULK HostVariableSpecification 

Buffer          is a host array structure that is to receive the output
                of the FETCH statement.  This structure contains fields
                for each column in the active set and indicator variables
                for columns that contain null values.  Whenever a column
                can contain nulls, an indicator variable must be included
                in the structure definition immediately after the
                definition of that column.  The indicator variable can
                receive the following integer values after a FETCH:

                0        meaning the column's value is not null

                -1       meaning the column's value is null

                >0       meaning the column's value is truncated (for
                         CHAR, VARCHAR, BINARY, and VARBINARY columns)

StartIndex      is a host variable whose value specifies the array
                subscript denoting where the first row fetched should be
                stored; default is the first element of the array.

NumberOfRows    is a host variable whose value specifies the maximum
                number of rows to fetch; default is to fill from the
                starting index to the end of the array.

                The total number of rows fetched is returned in the
                SQLERRD field of the SQLCA. You should check this area in
                case the number of rows returned is less than the maximum
                number of rows so that you don't process an incomplete
                result.

SQL Syntax--non-BULK HostVariableSpecification 

{:HostVariable [[INDICATOR] :Indicator]} [,...]

Parameters--non-BULK HostVariableSpecification 

HostVariable  identifies the host variable corresponding to one column in
              the row fetched.

Indicator     names the indicator variable, an output host variable whose
              value depends on whether the host variable contains a null
              value.  The following integer values are valid:

              0        meaning the column's value is not null

              -1       meaning the column's value is null

              >0       meaning the column's value is truncated (for CHAR,
                       VARCHAR, BINARY, and VARBINARY columns)

Description 

   *   This statement cannot be used interactively.

   *   When using this statement to access LONG columns, the name of the
       file is returned in the appropriate field in the host variable
       declaration parameter, SQLDA, or area name parameter specified.
       If the output mode is specified with $, then each LONG column in
       each row accessed is stored in a file with a unique name.

   *   The use of a descriptor area implies a multiple row result set.
       You cannot use the BULK keyword if you employ the DESCRIPTOR
       identifier.

   *   For a procedure cursor that returns results of a single format, if
       the procedure was created with the WITH RESULT clause, since all
       result sets have the same format, it is not necessary to issue an
       ADVANCE statement to advance from one result set to the next.  No
       end of result set condition is generated on a FETCH statement
       until all result sets have been fetched.  When the end of a result
       set has been reached, the next FETCH statement issued causes
       procedure execution to continue either until the next result set
       is encountered and the first row of the next result set is
       returned or until procedure execution terminates.

   *   The USING clause is not allowed within a procedure.

   *   The BULK option is not allowed within a procedure.

Authorization 

You do not need authorization to use the FETCH statement.

Examples 

   1.  Static update

       A cursor for use in updating values in column QtyOnHand is
       declared and opened.

            DECLARE NewQtyCursor CURSOR FOR
              SELECT PartNumber,QtyOnHand FROM PurchDB.Inventory
              FOR UPDATE OF QtyOnHand

            OPEN NewQtyCursor

       Statements setting up a FETCH-UPDATE loop appear next.

             FETCH NewQtyCursor INTO :Num :Numnul, :Qty :Qtynul 

       Statements for displaying a row to and accepting a new QtyOnHand
       value from a user go here.  The new value is stored in :NewQty.

            UPDATE PurchDB.Inventory
              SET QtyOnHand = :NewQty
              WHERE CURRENT OF NewQtyCursor

            CLOSE NewQtyCursor

   2.  Static bulk fetch

            DECLARE ManyRows CURSOR FOR
              SELECT * FROM PurchDB.Inventory

       In some instances, using the BULK option is more efficient than
       advancing the cursor a row at a time through many rows, especially
       when you want to operate on the rows with non-ALLBASE/SQL
       statements.

            OPEN ManyRows

             BULK FETCH ManyRows INTO :Rows, :Start, :NumRow 

       The query result is returned to an array called Rows.

   3.  Dynamic select cursor using an sqlda_type data structure

       Assume that host variable Dynam1 contains a SELECT statement.  The
       statement stored in :Dynam1 is dynamically preprocessed.

            PREPARE Dynamic1 FROM :Dynam1

       The DESCRIBE statement loads the specified sqlda_type data
       structure with the characteristics of the FETCH statement.  See
       the ALLBASE/SQL application programming guides for complete
       information regarding this data structure.

            DESCRIBE Dynamic1 INTO SQLDA

       Define a cursor to be used to move through the query result row by
       row.

            DECLARE Dynamic1Cursor CURSOR FOR Dynamic1

       Open the cursor to define rows of the active set.

            OPEN Dynamic1Cursor

       Fetch the selected data into the data buffer.  Additional rows are
       fetched with each execution of the FETCH statement until all rows
       have been fetched.  See the ALLBASE/SQL application programming
       guides for more detailed examples.

             FETCH Dynamic1Cursor USING DESCRIPTOR SQLDA 

       Close the cursor to free the active set.

            CLOSE Dynamic1Cursor

   4.  Dynamic select cursor using host variables

       Assume that host variable Dynam1 contains a SELECT statement.  The
       statement stored in :Dynam1 is dynamically preprocessed.

            PREPARE Dynamic1 FROM :Dynam1

       Define a cursor to be used to move through the query result row by
       row.

            DECLARE Dynamic1Cursor CURSOR FOR Dynamic1

       Open the cursor to define rows of the active set.

            OPEN Dynamic1Cursor

       Fetch the selected data into the specified host variables.  With
       each execution of the FETCH statement one additional row is
       fetched until all rows have been fetched.

             FETCH Dynamic1Cursor USING :HostVariable1, :HostVariable2 

       Close the cursor to free the active set.

            CLOSE Dynamic1Cursor

   5.  Refer to the ALLBASE/SQL Advanced Application Programming Guide 
       for a pseudocode example of procedure cursor usage.



MPE/iX 5.5 Documentation