DB2 Server for VSE & VM: Application Programming


Using Stored Procedures

The following example shows how to define the parameters in a stored procedure that uses the GENERAL linkage convention. PLIST=OS must be specified.

Figure 109. Stored Procedures - Using GENERAL Linkage Convention

     *******************************************************************
     *  CODE FOR AN ASSEMBLER LANGUAGE STORED PROCEDURE THAT USES      *
     *  THE GENERAL LINKAGE CONVENTION.                                *
     *******************************************************************
     A        CEEENTRY AUTO=PROGSIZE,MAIN=YES,PLIST=OS
              USING PROGAREA,R13
       .
       .
     *******************************************************************
     *  GET THE PASSED PARAMETER VALUES. THE GENERAL LINKAGE CONVENTION*
     *  FOLLOWS THE STANDARD ASSEMBLER LINKAGE CONVENTION:             *
     *  ON ENTRY, REGISTER 1 POINTS TO A LIST OF POINTERS TO THE       *
     *  PARAMETERS.                                                    *
     *******************************************************************
              L     R7,0(R1)            GET POINTER TO V1
              MVC   LOCV1(4),0(R7)      MOVE VALUE INTO LOCAL COPY OF V1
 
       .
       .
       .
              L     R7,4(R1)            GET POINTER TO V2
              MVC   0(9,R7),LOCV2       MOVE A VALUE INTO OUTPUT VAR V2
 
       .
       .
       .
              CEETERM  RC=0
     *******************************************************************
     *  VARIABLE DECLARATIONS AND EQUATES                              *
     *******************************************************************
     R1       EQU   1                   REGISTER 1
     R7       EQU   7                   REGISTER 7
     PPA      CEEPPA  ,                 CONSTANTS DESCRIBING CODE BLOCK
              LTORG ,                   PLACE LITERAL POOL HERE
     PROGAREA DSECT
              ORG   *+CEEDSASZ          LEAVE SPACE FOR DSA FIXED PART
     LOCV1    DS    F                   LOCAL COPY OF PARAMETER V1
     LOCV2    DS    CL9                 LOCAL COPY OF PARAMETER V2
 
       .
       .
       .
     PROGSIZE EQU   *-PROGAREA
              CEEDSA  ,                 MAPPING OF THE DYNAMIC SAVE AREA
              CEECAA  ,                 MAPPING OF THE COMMON ANCHOR AREA
              END   A

The following example shows how to define the paramters in a stored procedure that uses the GENERAL WITH NULLS linkage convention.

Figure 110. Stored Procedure - Using GENERAL WITH NULLS Linkage Convention

     *******************************************************************
     *  CODE FOR AN ASSEMBLER LANGUAGE STORED PROCEDURE THAT USES      *
     *  THE GENERAL WITH NULLS LINKAGE CONVENTION                      *
     *******************************************************************
     B        CEEENTRY AUTO=PROGSIZE,MAIN=YES,PLIST=OS
              USING PROGAREA,R13
     *******************************************************************
       .
       .
     *******************************************************************
     *  GET THE PASSED PARAMETER VALUES. THE GENERAL WITH NULLS LINKAGE*
     *  CONVENTION IS AS FOLLOWS:                                      *
     *  ON ENTRY, REGISTER 1 POINTS TO A LIST OF POINTERS. IF N        *
     *  PARAMETERS ARE PASSED, THERE ARE N+1 POINTERS. THE FIRST       *
     *  N POINTERS ARE THE ADDRESSES OF THE N PARAMETERS, JUST AS      *
     *  WITH THE GENERAL LINKAGE CONVENTION.  THE N+1ST POINTER IS     *
     *  THE ADDRESS OF A LIST CONTAINING THE N INDICATOR VARIABLE      *
     *  VALUES.                                                        *
     *******************************************************************
              L     R7,0(R1)            GET POINTER TO V1
              MVC   LOCV1(4),0(R7)      MOVE VALUE INTO LOCAL COPY OF V1
              L     R7,8(R1)            GET POINTER TO INDICATOR ARRAY
              MVC   LOCIND(2*2),0(R7)   MOVE VALUES INTO LOCAL STORAGE
              LH    R7,LOCIND           GET INDICATOR VARIABLE FOR V1
              LTR   R7,R7               CHECK IF IT IS NEGATIVE
              BM    NULLIN              IF SO, V1 IS NULL
 
       .
       .
       .
              L     R7,4(R1)            GET POINTER TO V2
              MVC   0(9,R7),LOCV2       MOVE A VALUE INTO OUTPUT VAR V2
              L     R7,8(R1)            GET POINTER TO INDICATOR ARRAY
              MVC   2(2,R7),=H(0)       MOVE ZERO TO V2'S INDICATOR VAR
 
       .
       .
       .
              CEETERM  RC=0
     *******************************************************************
     *  VARIABLE DECLARATIONS AND EQUATES                              *
     *******************************************************************
     R1       EQU   1                   REGISTER 1
     R7       EQU   7                   REGISTER 7
     PPA      CEEPPA  ,                 CONSTANTS DESCRIBING THE CODE BLOCK
              LTORG ,                   PLACE LITERAL POOL HERE
     PROGAREA DSECT
              ORG   *+CEEDSASZ          LEAVE SPACE FOR DSA FIXED PART
     LOCV1    DS    F                   LOCAL COPY OF PARAMETER V1
     LOCV2    DS    CL9                 LOCAL COPY OF PARAMETER V2
     LOCIND   DS    2H                  LOCAL COPY OF INDICATOR ARRAY
 
       .
       .
       .
     PROGSIZE EQU   *-PROGAREA
              CEEDSA  ,                 MAPPING OF THE DYNAMIC SAVE AREA
              CEECAA  ,                 MAPPING OF THE COMMON ANCHOR AREA
              END   B
 


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]