Switch to standard view
Sybase logo  
Sybase logo  
Products | About Sybase | Support



COBOL Code Sample: *  MODELRSP - SAMPLE TO ILLUSTRATE SQLDA USAGE

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID.   RSPVSCOB.
000300 AUTHOR.       RICK BLAZE/SCOTT JACKSON.
000400 DATE-WRITTEN. MAY 17,1995.
000500*****************************************************************
000600*  MODELRSP - SAMPLE TO ILLUSTRATE SQLDA USAGE.                 *
000700*  **** NOTE!!!! ******                                         *
000710*  THIS PROGRAM IS RICK BLAZE'S MOST EXCELLENT MODEL.RSP        *
000720*  MODIFIED FOR USE WITH VS COBOL. DO NOT GIVE THIS TO ANYONE   *
000730*  OTHER THAN THOSE WHO DO NO HAVE VS COBOL II!                 *
000740*  **** NOTE!!!! ******                                         *
000750*                                                               *
001100*  THIS SAMPLE STORED PROCEDURE HAS A LOT OF INTERNAL           * *
001200*  DOCUMENTATION TO HELP EXPLAIN AND ILLUSTRATE THE PROPER      *
001300*  USAGE OF THE SQLDA FOR A DB2 OUTPUT PIPE.  A ROW IS SET UP   *
001400*  FOR ALL DATATYPES AND ALL WILL BE SET TO ALLOW NULLS.        *
001500*                                                               *
001600*****************************************************************
001700
001800 ENVIRONMENT DIVISION.
001900 DATA DIVISION.
002000 WORKING-STORAGE SECTION.
002100
002200 01 FILLER                       PIC X(27)  VALUE
002300                              'WORKING-STORAGE STARTS HERE'.
002400
002500 01  SQLDA-POINTER                  PIC S9(8) COMP.
002600 01  EMPLOYEE-DATA-POINTER          PIC S9(8) COMP.
002700 01  INDICATOR-VAR-POINTER          PIC S9(8) COMP.
002800 01  SQLDA-SIZE                     PIC S9(8)  COMP.
002900 01  COMPUTED-POINTER               PIC S9(8)  COMP.
003000
003100 01 WS-LITERALS.
003200     05 WS-STATUS                PIC X(06)  VALUE 'STATUS'.
003300     05 WS-MESSAGE               PIC X(07)  VALUE 'MESSAGE'.
003400     05 WS-COMMIT                PIC X(06)  VALUE 'COMMIT'.
003500     05 WS-ROLLBACK              PIC X(08)  VALUE 'ROLLBACK'.
003600     05 WS-OPENPIPE              PIC X(08)  VALUE 'OPENPIPE'.
003700     05 WS-PUTPIPE               PIC X(07)  VALUE 'PUTPIPE'.
003800     05 WS-GETPIPE               PIC X(07)  VALUE 'GETPIPE'.
003900     05 WS-CLOSPIPE              PIC X(08)  VALUE 'CLOSPIPE'.
004000
004100 01 MESSAGES.
004200    05  ERROR1-MSG.
004300        07  ERROR1-TEXT1         PIC X(19)  VALUE
004400            'ERROR WITH CALL TO '.
004500        07  ERROR1-CALL          PIC X(10)  VALUE SPACES.
004600        07  ERROR1-TEXT2         PIC X(14)  VALUE
004700            ' - SPRC CODE: '.
004800        07  ERROR1-SPRC          PIC X(03)  VALUE SPACES.
004900    05  ERROR2-MSG.
005000        07  ERROR2-TEXT2         PIC X(46)  VALUE SPACES.
005100    05  WS-LONG-VARCHAR-TEXT.
005200        07  FILLER               PIC X(50)  VALUE
005300        'THIS IS A LINE OF VERY LONG TEXT TO DEMOMONSTRATE '.
005400        07  FILLER               PIC X(50)  VALUE
005500        'THAT A LONG VARCHAR DATATYPE CAN BE SENT DOWN A DB'.
005600        07  FILLER               PIC X(50)  VALUE
005700        '2 OUTPUT PIPE WITH NO PROBLEMS, WORRIES, OR CONSOL'.
005800        07  FILLER               PIC X(50)  VALUE
005900        'ATION, AS LONG AS ONE REMEMBERS THAT LARGE AMOUNTS'.
006000        07  FILLER               PIC X(50)  VALUE
006100        ' OF DATA WILL ALWAYS HAVE AN ELEMENT OF UNEXPECTED'.
006200        07  FILLER               PIC X(50)  VALUE
006300        'NESS.  REGARDLESS, USE MDI FOR ALL YOUR SOLUTIONS!'.
006400
006500******************************************************************
006600*  DESCRIPTION OF THE MODEL SQLDA                                *
006700******************************************************************
006800*
006900*    SQLTYPES USED IN SQLDA:
007000*    VALUE     DATA TYPE            NULLS ALLOWED
007100*    =======   ===================  =============
007200*    384/385   DATE                 NO/YES
007300*    388/389   TIME                 NO/YES
007400*    392/393   TIMESTAMP            NO/YES
007500*    448/449   CHAR VARIABLE LENG   NO/YES
007600*    452/453   CHAR FIXED LENGTH    NO/YES
007700*    456/457   CHAR LONG VARIABLE   NO/YES
007800*    480/481   FLOATING-POINT       NO/YES
007900*    484/485   DECMIAL              NO/YES
008000*    496/497   LARGE INTEGER        NO/YES
008100*    500/501   SMALL INTERGER       NO/YES
008200********************************************************
008300*  NOTE: ALL DATATYPES IN THIS EXAMPLE ARE DEFINED AS NULLABLE
008400********************************************************
008500 01 MODEL-SQLDA.
008600*     - EYE CATCHER - MUST ALWAYS SAY 'SQLDA   '.
008700     03  MS-SQLAID                 PIC X(08)  VALUE 'SQLDA   '.
008800*     - SIZE OF SQLDA = 16 + (44 * SQLN VALUE)
008900     03  MS-SQLDABC                PIC S9(8)  COMP VALUE 500.
009000*     - NUMBER OF SQLVAR OCCURENCES
009100*     - MUST MATCH VALUE OF MS-SQLD
009200     03  MS-SQLN                   PIC S9(4)  COMP VALUE 11.
009300*     - NUMBER OF SQLVAR OCCURENCES ACTUALLY USED
009400*     - MUST MATCH VALUE OF MS-SQLN
009500     03  MS-SQLD                   PIC S9(4)  COMP VALUE 11.
009600     03  MS-COL01.
009700*      - 1ST   COLUMN DATATYPE = FIXED CHAR (LENGTH 1 - 256)
009800         05  MS-COL01-SQLTYPE       PIC S9(4)  COMP VALUE 453.
009900         05  MS-COL01-SQLLEN        PIC S9(4)  COMP VALUE 5.
010000*          -  SQLDATA WILL BE SET TO ADDRESS OF DATA FIELD
010100         05  MS-COL01-SQLDATA       PIC S9(8) COMP.
010200*          -  SQLIND WILL BE SET TO ADDRESS OF A S9(4) COMP FIELD
010300*          -  WHEN COMP FIELD'S VALUE IS LESS THAN ZERO THEN
010400*          -  COLUMN IS NULL - ONLY USED WHEN COLUMN IS NULLABLE
010500         05  MS-COL01-SQLIND        PIC S9(8) COMP VALUE ZERO.
010600*          -  SQLNAMEL IS THE LENGTH OF THE COLUMN NAME
010700         05  MS-COL01-SQLNAMEL      PIC S9(4)  COMP VALUE 10.
010800*          -  SQLNAME IS ALWAYS 30 IN LENGTH
010900         05  MS-COL01-SQLNAME   PIC X(30) VALUE 'FIXED_CHAR'.
011000     03  MS-COL02.
011100*      - 2ND   COLUMN DATATYPE = DATE (LENGTH ALWAYS 10)
011200         05  MS-COL02-SQLTYPE       PIC S9(4) COMP VALUE 385.
011300         05  MS-COL02-SQLLEN        PIC S9(4) COMP VALUE 10.
011400         05  MS-COL02-SQLDATA       PIC S9(8) COMP.
011500         05  MS-COL02-SQLIND        PIC S9(8) COMP VALUE ZERO.
011600         05  MS-COL02-SQLNAMEL      PIC S9(4) COMP VALUE 4.
011700         05  MS-COL02-SQLNAME       PIC X(30) VALUE 'DATE'.
011800     03  MS-COL03.
011900*      - 3RD   COLUMN DATATYPE = VARIABLE LENGTH CHAR (1-256)
012000         05  MS-COL03-SQLTYPE       PIC S9(4) COMP VALUE 449.
012100         05  MS-COL03-SQLLEN        PIC S9(4) COMP VALUE 30.
012200         05  MS-COL03-SQLDATA       PIC S9(8) COMP.
012300         05  MS-COL03-SQLIND        PIC S9(8) COMP VALUE ZERO.
012400         05  MS-COL03-SQLNAMEL      PIC S9(4) COMP VALUE 7.
012500         05  MS-COL03-SQLNAME       PIC X(30) VALUE 'VARCHAR'.
012600     03  MS-COL04.
012700*      - 4TH COL - DATATYPE = SMALL INTEGER (LENGTH ALWAYS 2)
012800*      - CORRESPONDING PIC S9(4) COMP - UP TO 5 DIGITS.
012900         05  MS-COL04-SQLTYPE       PIC S9(4) COMP VALUE 501.
013000         05  MS-COL04-SQLLEN        PIC S9(4) COMP VALUE 2.
013100         05  MS-COL04-SQLDATA       PIC S9(8) COMP.
013200         05  MS-COL04-SQLIND        PIC S9(8) COMP VALUE ZERO.
013300         05  MS-COL04-SQLNAMEL      PIC S9(4) COMP VALUE 9.
013400         05  MS-COL04-SQLNAME       PIC X(30) VALUE 'SMALL_INT'.
013500     03  MS-COL05.
013600*      - 5TH COL - DATATYPE = PACKED DECIMAL
013700         05  MS-COL05-SQLTYPE       PIC S9(4) COMP VALUE 485.
013800*******- NOTE: FOR PACKED DECIMAL DATATYPES ONLY!!!!!
013900*      - LENGTH IS DECIMAL TRANSLATION OF HEX "PPSS"
014000*      - WHERE "PP" = NUMBER OF TOTAL DIGITS
014100*      -   AND "SS" = NUMBER OF DIGITS TO RIGHT OF DECIMAL
014200*      -  S9(3)V99 COMP-3 WOULD BE X'0502' OR IN DEC '1282'
014300*      -  S9(11)V99 COMP-3 WOULD BE X'0D02' OR IN DEC '3330'
014400         05  MS-COL05-SQLLEN        PIC S9(4) COMP VALUE 1282.
014500*        05  MS-COL05-SQLLEN-X      PIC X(2)  VALUE X'0502'.
014600*        05  MS-COL05-SQLLEN REDEFINES MS-COL05-SQLLEN-X
014700*                                   PIC S9(4) COMP.
014800         05  MS-COL05-SQLDATA       PIC S9(8) COMP.
014900         05  MS-COL05-SQLIND        PIC S9(8) COMP VALUE ZERO.
015000         05  MS-COL05-SQLNAMEL      PIC S9(4) COMP VALUE 10.
015100         05  MS-COL05-SQLNAME       PIC X(30) VALUE 'PACKED_DEC'.
015200     03  MS-COL06.
015300*      - 6TH COL - DATATYPE = TIME (LENGTH ALWAYS 8) 'HH.MM.SS'
015400         05  MS-COL06-SQLTYPE       PIC S9(4) COMP VALUE 389.
015500         05  MS-COL06-SQLLEN        PIC S9(4) COMP VALUE 8.
015600         05  MS-COL06-SQLDATA       PIC S9(8) COMP.
015700         05  MS-COL06-SQLIND        PIC S9(8) COMP VALUE ZERO.
015800         05  MS-COL06-SQLNAMEL      PIC S9(4) COMP VALUE 4.
015900         05  MS-COL06-SQLNAME       PIC X(30) VALUE 'TIME'.
016000     03  MS-COL07.
016100*      - 7TH COL - DATATYPE = TIMESTAMP (LENGTH 19 OR 26)
016200*      - PIC X(19) VALUE 'YYYY-MM-DD:HH:MM:SS'
016300*      - PIC X(26) VALUE 'YYYY-MM-DD:HH:MM:SS:NNNNNN'
016400         05  MS-COL07-SQLTYPE       PIC S9(4) COMP VALUE 393.
016500         05  MS-COL07-SQLLEN        PIC S9(4) COMP VALUE 26.
016600         05  MS-COL07-SQLDATA       PIC S9(8) COMP.
016700         05  MS-COL07-SQLIND        PIC S9(8) COMP VALUE ZERO.
016800         05  MS-COL07-SQLNAMEL      PIC S9(4) COMP VALUE 9.
016900         05  MS-COL07-SQLNAME       PIC X(30) VALUE 'TIMESTAMP'.
017000     03  MS-COL08.
017100*      - 8TH COL - DATATYPE = FLOAT (COMP-1 LENGTH ALWAYS 4)
017200*      -     SINGLE PERCISION FLOAT (COMP-1 LENGTH ALWAYS 4)
017300         05  MS-COL08-SQLTYPE       PIC S9(4) COMP VALUE 481.
017400         05  MS-COL08-SQLLEN        PIC S9(4) COMP VALUE 4.
017500         05  MS-COL08-SQLDATA       PIC S9(8) COMP.
017600         05  MS-COL08-SQLIND        PIC S9(8) COMP VALUE ZERO.
017700         05  MS-COL08-SQLNAMEL      PIC S9(4) COMP VALUE 10.
017800         05  MS-COL08-SQLNAME       PIC X(30) VALUE 'FLOATING_P'.
017900     03  MS-COL09.
018000*      - 9TH COL - DATATYPE = FLOAT (COMP-2 LENGTH ALWAYS 8)
018100*      -     DOUBLE PERCISION FLOAT (COMP-2 LENGTH ALWAYS 8)
018200         05  MS-COL09-SQLTYPE       PIC S9(4) COMP VALUE 481.
018300         05  MS-COL09-SQLLEN        PIC S9(4) COMP VALUE 8.
018400         05  MS-COL09-SQLDATA       PIC S9(8) COMP.
018500         05  MS-COL09-SQLIND        PIC S9(8) COMP VALUE ZERO.
018600         05  MS-COL09-SQLNAMEL      PIC S9(4) COMP VALUE 10.
018700         05  MS-COL09-SQLNAME       PIC X(30) VALUE 'DBL_FLOATP'.
018800     03  MS-COL10.
018900*      -10TH COL - DATATYPE = LARGE INTEGER (LENGTH ALWAYS 4)
019000*      - CORRESPONDING PIC S9(8) COMP - UP TO 10 DIGITS.
019100         05  MS-COL10-SQLTYPE       PIC S9(4) COMP VALUE 497.
019200         05  MS-COL10-SQLLEN        PIC S9(4) COMP VALUE 4.
019300         05  MS-COL10-SQLDATA       PIC S9(8) COMP.
019400         05  MS-COL10-SQLIND        PIC S9(8) COMP VALUE ZERO.
019500         05  MS-COL10-SQLNAMEL      PIC S9(4) COMP VALUE 7.
019600         05  MS-COL10-SQLNAME       PIC X(30) VALUE 'INTEGER'.
019700     03  MS-COL11.
019800*      - 11TH  COL DATATYPE = LONG VARIABLE LENGTH CHAR (1-32K)
019900         05  MS-COL11-SQLTYPE       PIC S9(4) COMP VALUE 457.
020000         05  MS-COL11-SQLLEN        PIC S9(4) COMP VALUE 300.
020100         05  MS-COL11-SQLDATA       PIC S9(8) COMP.
020200         05  MS-COL11-SQLIND        PIC S9(8) COMP VALUE ZERO.
020300         05  MS-COL11-SQLNAMEL      PIC S9(4) COMP VALUE 8.
020400         05  MS-COL11-SQLNAME       PIC X(30) VALUE 'LVARCHAR'.
020500
020600 LINKAGE SECTION.
020700**************************************************************
020800* THE LINKAGE SECTION DEFINES MASKS FOR DATA AREAS
020900* THAT ARE EITHER PASSED TO THE PROGRAM IN THE CASE OF THE
021000* COMMAREA OR CREATED BY THE PROGRAM IN THE CASE OF THE SQLDA
021100* AND DATA FIELDS.
021200*
021300* UNLIKE WORKING-STORAGE, STORAGE ASSOCIATED WITHIN THE LINKAGE
021400* SECTION IS AVAILABLE TO OTHER PROGRAMS BY PASSING ADDRESSES
021500* AND USING MASKS.
021600*
021700* IT IS IMPORTANT TO NOTE, THAT EVEN THOUGH THE DEFINES IN
021800* THE LINKAGE SECTION LOOKS EXACTLY LIKE THOSE IN WORKING
021900* STORAGE, NO SPACE IS ASSOCIATED WITH THESE DEFINED IN LINKAGE
022000* UNTIL IT IS "GETMAINED".
022100**************************************************************
022200
022300 01  DFHCOMMAREA.
022400     COPY SPAREAC.
022500
022600 01  BLLCELLS.
022700     02  FILLER                     PIC S9(8) COMP.
022800**   02  SPA-PTR                    PIC S9(8) COMP.
022900     02  IND-PTR                    PIC S9(8) COMP.
023000     02  EMP-PTR                    PIC S9(8) COMP.
023100     02  SQLDA-PTR                  PIC S9(8) COMP.
023200******************************************************************
023300*  NULL INDICATOR VARIABLES - SET TO -1 IF NULL; 0 IF NOTZERO.  *
023400*  ONLY REQUIRED FOR COLUMNS DEFINED AS ALLOWING NULLS!          *
023500******************************************************************
023600 01  INDICATOR-VARIABLES.
023700     10 FIXED-CHAR-IND       PIC S9(4) COMP.
023800     10 DATE-OUT-IND         PIC S9(4) COMP.
023900     10 VAR-CHAR-IND         PIC S9(4) COMP.
024000     10 SMALL-INT-IND        PIC S9(4) COMP.
024100     10 PACKED-DEC-IND       PIC S9(4) COMP.
024200     10 TIME-OUT-IND         PIC S9(4) COMP.
024300     10 TIMESTAMP-IND        PIC S9(4) COMP.
024400     10 FLOAT-SGL-IND        PIC S9(4) COMP.
024500     10 FLOAT-DBL-IND        PIC S9(4) COMP.
024600     10 LARGE-INT-IND        PIC S9(4) COMP.
024700     10 LARGE-VCHAR-IND      PIC S9(4) COMP.
024800
024900******************************************************************
025000*  DESCRIPTION OF THE EMPLOYEE DATA                              *
025100******************************************************************
025200*  NOTE THAT VARCHAR AND LONG-VARCHAR FIELDS ARE PRECEEDED BY    *
025300*  A TWO-BYTE COMP LENGTH FIELD.  SQLDA KNOWS NOT TO INCLUDE THE *
025400*  EXTRA TWO BYTES IN THE LENGTH OF THE DATA.  WANT TO SEE YOUR  *
025500*  REGION COME DOWN?  TRY LEAVING THE LENGTH FIELD OUT...        *
025600*  THE FIRST TWO BYTES OF YOUR DATA WILL BE USED TO CALC THE     *
025700*  LENGTH OF YOUR DATA AND CICS WILL START TO EAT ITSELF...      *
025800******************************************************************
025900 01  EMPLOYEE-DATA.
026000     10 FIXED-CHAR           PIC X(05).
026100     10 DATE-OUT             PIC X(10).
026200     10 VAR-CHAR.
026300        15 VCHAR-LENGTH      PIC S9(4) COMP.
026400        15 VCHAR-DATA        PIC X(30).
026500     10 SMALL-INT            PIC S9(4) USAGE COMP.
026600     10 PACKED-DEC           PIC S999V99 USAGE COMP-3.
026700     10 TIME-OUT             PIC X(08).
026800     10 TIMESTAMP            PIC X(26).
026900     10 FLOAT-SGL            COMP-1.
027000     10 FLOAT-DBL            COMP-2.
027100     10 LARGE-INT            PIC S9(8) USAGE COMP.
027200     10 LARGE-VAR-CHAR.
027300        15 L-VCHAR-LENGTH    PIC S9(4) COMP.
027400        15 L-VCHAR-DATA      PIC X(300).
027500
027600******************************************************************
027700*  DESCRIPTION OF THE SQLDA MASK                                 *
027800******************************************************************
027900 01  SQLDA.
028000     03  SQLDAID                    PIC X(8).
028100     03  SQLDABC                    PIC S9(8) COMP.
028200     03  SQLN                       PIC S9(4) COMP.
028300     03  SQLD                       PIC S9(4) COMP.
028400     03  SQLVARN                    OCCURS 11.
028500         05  SQLTYPE                PIC S9(4) COMP.
028600         05  SQLLEN                 PIC S9(4) COMP.
028700         05  SQLDATA                PIC S9(8) COMP.
028800         05  SQLIND                 PIC S9(8) COMP.
028900         05  SQLNAMEL               PIC S9(4) COMP.
029000         05  SQLNAME                PIC X(30).
029100
029200*-------------------------------------------------------*
029300 PROCEDURE DIVISION.
029400*-------------------------------------------------------*
029500     EXEC CICS HANDLE CONDITION
029600          INVREQ(9999-RETURN-TO-CALLER)
029700          END-EXEC.
029800
029900 0000-MAIN-PROCESSING.
030000
030100     SERVICE RELOAD BLLCELLS.
030200
030300     PERFORM 1000-INITIALIZATION         THRU 1000-EXIT.
030400
030500     PERFORM 5000-PROCESS-DATA           THRU 5000-EXIT.
030600
030700     PERFORM 9000-WRAP-UP                THRU 9000-EXIT.
030800
030900     EXEC CICS
031000          RETURN
031100     END-EXEC.
031200
031300     GOBACK.
031400
031500*-------------------------------------------------------*
031600 1000-INITIALIZATION.
031700*-------------------------------------------------------*
031800
031900     PERFORM 1100-TEST-SQLDA             THRU 1100-EXIT.
032000
032100     PERFORM 1200-GET-STORAGE            THRU 1200-EXIT.
032200
032300     PERFORM 1300-SET-ADDRESSES          THRU 1300-EXIT.
032400
032500     PERFORM 1400-OPEN-OUTPUT-PIPE       THRU 1400-EXIT.
032600
032700 1000-EXIT.
032800     EXIT.
032900
033000*-------------------------------------------------------*
033100 1100-TEST-SQLDA.
033200*-------------------------------------------------------*
033300
033400******************************************************
033500* CALCULATE THE CORRECT SQLDA SIZE INTO "SQLDA-SIZE"
033600
033700     MULTIPLY MS-SQLN BY 44            GIVING SQLDA-SIZE.
033800     ADD +16                           TO SQLDA-SIZE.
033900     MOVE SQLDA-SIZE                   TO MS-SQLDABC.
034000
034100
034200******************************************************
034300* CHECK TO MAKE SURE THE CALCULATED SIZE EQUALS ACTUAL SIZE
034400* IF IT DOESN'T THEN AN SQLDA FIELD IS MISSING OR ONE
034500*   OF THE SQLDA FIELDS HAS THE WRONG PICTURE SIZE.
034600
034700*    IF (LENGTH OF MODEL-SQLDA) NOT EQUAL SQLDA-SIZE
034800*        MOVE 'SQLDA/SQLN SIZE IN ERROR'  TO ERROR2-TEXT2
034900*        PERFORM 9810-ERROR-MSG           THRU 9810-EXIT
035000*        GO TO 9999-RETURN-TO-CALLER.
035100
035200 1100-EXIT.
035300     EXIT.
035400
035500*-------------------------------------------------------*
035600 1200-GET-STORAGE.
035700*-------------------------------------------------------*
035800
035900******************************************************
036000* ALLOCATE A BLOCK OF STORAGE TO BE USED FOR THE SQLDA
036100* SET POINTER VARIABLE TO ADDRESS OF ALLOCATED STORAGE
036200* USE FLENGTH TO ALLOCATE STORAGE ABOVE THE 16M LINE
036300    EXEC CICS GETMAIN
036400              SET      (SQLDA-PTR)
036500              LENGTH  (500)
036600              END-EXEC.
036700
036800******************************************************
036900* ASSOCIATE THE LINKAGE SQLDA MASK TO THE ALLOCATED STORAGE
037000* BY SETTING THE MASK ADDRESS TO THE ADDRESS OF THE STORAGE
037100*    SET ADDRESS OF SQLDA TO SQLDA-POINTER.
037200     SERVICE RELOAD SQLDA.
037300
037400******************************************************
037500* ALLOCATE A BLOCK OF STORAGE TO BE USED FOR THE DATA
037600* SET POINTER VARIABLE TO ADDRESS OF ALLOCATED STORAGE
037700     EXEC CICS GETMAIN
037800               SET(EMP-PTR)
037900               LENGTH(400)
038000     END-EXEC.
038100*    SET ADDRESS OF EMPLOYEE-DATA TO EMPLOYEE-DATA-POINTER.
038200     SERVICE RELOAD EMPLOYEE-DATA.
038300
038400
038500******************************************************
038600* ALLOCATE A BLOCK OF STORAGE TO BE USED FOR NULL INDICATORS
038700* ONLY REQUIRED FOR COLUMNS DEFINED AS ALLOWING NULLS
038800* SET POINTER VARIABLE TO ADDRESS OF ALLOCATED STORAGE
038900     EXEC CICS GETMAIN
039000               SET(IND-PTR)
039100               FLENGTH(200)
039200     END-EXEC.
039300*    SET ADDRESS OF INDICATOR-VARIABLES TO INDICATOR-VAR-POINTER.
039400     SERVICE RELOAD INDICATOR-VARIABLES.
039500
039600 1200-EXIT.
039700     EXIT.
039800
039900*-------------------------------------------------------*
040000 1300-SET-ADDRESSES.
040100*-------------------------------------------------------*
040200
040300
040400*********************************************************
040500* SET THE POINTER VARIABLES IN THE LINKAGE SECTION SQLDA TO
040600* THE ADDRESSES OF THE DATA LOCATIONS ALSO IN THE LINKAGE
040700* SECTION IE: THE DATA FIELDS IN EMPLOYEE-DATA
040800*
040900* THESE ADDRESSES MUST BE ADDRESSES ASSOCIATED WITH VARIABLES
041000* DEFINED IN THE LINKAGE SECTION BECAUSE THE CALLED MDI
041100* PROGRAM MUST BE ABLE TO ACCESS THIS STORAGE.
041200*********************************************************
041300     MOVE MODEL-SQLDA TO SQLDA.
041400
041500     MOVE EMP-PTR TO SQLDATA(1).
041600*    SET SQLDATA(2)  TO ADDRESS OF  DATE-OUT.
041700     COMPUTE SQLDATA(2) = EMP-PTR + 5.
041800*    SET SQLDATA(3)  TO ADDRESS OF  VAR-CHAR.
041900     COMPUTE SQLDATA(3) = EMP-PTR + 17.
042000*    SET SQLDATA(4)  TO ADDRESS OF  SMALL-INT.
042100     COMPUTE SQLDATA(4) = EMP-PTR + 47.
042200*    SET SQLDATA(5)  TO ADDRESS OF  PACKED-DEC.
042300     COMPUTE SQLDATA(5) = EMP-PTR + 49.
042400*    SET SQLDATA(6)  TO ADDRESS OF  TIME-OUT.
042500     COMPUTE SQLDATA(6) = EMP-PTR + 52.
042600*    SET SQLDATA(7)  TO ADDRESS OF  TIMESTAMP.
042700     COMPUTE SQLDATA(7) = EMP-PTR + 60.
042800*    SET SQLDATA(8)  TO ADDRESS OF  FLOAT-SGL.
042900     COMPUTE SQLDATA(8) = EMP-PTR + 86.
043000*    SET SQLDATA(9)  TO ADDRESS OF  FLOAT-DBL.
043100     COMPUTE SQLDATA(9) = EMP-PTR + 94.
043200*    SET SQLDATA(10) TO ADDRESS OF  LARGE-INT.
043300     COMPUTE SQLDATA(10) = EMP-PTR + 110.
043400*    SET SQLDATA(11) TO ADDRESS OF  LARGE-VAR-CHAR.
043500     COMPUTE SQLDATA(11) = EMP-PTR + 116.
043600
043700****************************************************
043800*  SET SQLIND TO ADDRESS OF NULL INDICATOR FIELDS
043900*  FOR ANY COLUMN DEFINED AS NULLABLE
044000
044100*    SET SQLIND(1)   TO ADDRESS OF  FIXED-CHAR-IND.
044200     MOVE IND-PTR TO SQLIND(1).
044300*    SET SQLIND(2)   TO ADDRESS OF  DATE-OUT-IND.
044400     COMPUTE SQLIND(2) = IND-PTR + 2.
044500*    SET SQLIND(3)   TO ADDRESS OF  VAR-CHAR-IND.
044600     COMPUTE SQLIND(3) = IND-PTR + 4.
044700*    SET SQLIND(4)   TO ADDRESS OF  SMALL-INT-IND.
044800     COMPUTE SQLIND(4) = IND-PTR + 6.
044900*    SET SQLIND(5)   TO ADDRESS OF  PACKED-DEC-IND.
045000     COMPUTE SQLIND(5) = IND-PTR + 8.
045100*    SET SQLIND(6)   TO ADDRESS OF  TIME-OUT-IND.
045200     COMPUTE SQLIND(6) = IND-PTR + 10.
045300*    SET SQLIND(7)   TO ADDRESS OF  TIMESTAMP-IND.
045400     COMPUTE SQLIND(7) = IND-PTR + 12.
045500*    SET SQLIND(8)   TO ADDRESS OF  FLOAT-SGL-IND.
045600     COMPUTE SQLIND(8) = IND-PTR + 14.
045700*    SET SQLIND(9)   TO ADDRESS OF  FLOAT-DBL-IND.
045800     COMPUTE SQLIND(9) = IND-PTR + 16.
045900*    SET SQLIND(10)  TO ADDRESS OF  LARGE-INT-IND.
046000     COMPUTE SQLIND(10) = IND-PTR + 18.
046100*    SET SQLIND(11)  TO ADDRESS OF  LARGE-VCHAR-IND.
046200     COMPUTE SQLIND(11) = IND-PTR + 20.
046300
046400 1300-EXIT.
046500     EXIT.
046600
046700*-------------------------------------------------------*
046800 1400-OPEN-OUTPUT-PIPE.
046900*-------------------------------------------------------*
047000
047100****************************************************
047200*  AFTER A SUCCESSFUL OPENPIPE: HEADER, TABLE, AND
047300*    COLUMN IXF RECORDS ARE GENERATED AND SENT TO APPC.
047400
047500     MOVE 'OUTPUT'                TO SPMODE.
047600     MOVE 'DB2'                   TO SPFORMAT.
047700*    SET SPSQLDA                  TO ADDRESS OF SQLDA.
047800     MOVE SQLDA-PTR               TO SPSQLDA.
047900
049200     CALL 'OPENPIPE'              USING SPAREA.
049300
049400     IF SPRC IS NOT EQUAL TO '000'
049500         MOVE WS-OPENPIPE              TO ERROR1-CALL
049600         PERFORM 9800-PIPE-ERROR-MSG   THRU 9800-EXIT
049700         GO TO 9999-RETURN-TO-CALLER.
049800
049900 1400-EXIT.
050000     EXIT.
050100
050200*-------------------------------------------------------*
050300 5000-PROCESS-DATA.
050400*-------------------------------------------------------*
050500
050600     PERFORM 5300-LOAD-A-ROW      THRU 5300-EXIT.
050700
050800     PERFORM 5500-SEND-A-ROW      THRU 5500-EXIT.
050900
051000     PERFORM 5400-LOAD-A-NULL-ROW THRU 5400-EXIT.
051100
051200     PERFORM 5500-SEND-A-ROW      THRU 5500-EXIT.
051300
051400 5000-EXIT.
051500     EXIT.
051600
051700*-------------------------------------------------------*
051800 5300-LOAD-A-ROW.
051900*-------------------------------------------------------*
052000     MOVE '00100'                 TO FIXED-CHAR.
052100     MOVE '1993-09-16'            TO DATE-OUT.
052200     MOVE 30                      TO VCHAR-LENGTH.
052300     MOVE 'A ROSE BY ANY OTHER..' TO VCHAR-DATA.
052400     MOVE 123                     TO SMALL-INT.
052500     MOVE 123.45                  TO PACKED-DEC.
052600     MOVE '11.35.25'              TO TIME-OUT.
052700     MOVE '1993-10-31:10:34:24'   TO TIMESTAMP.
052800     MOVE 1.00345                 TO FLOAT-SGL.
052900     MOVE 0.0023544               TO FLOAT-DBL.
053000     MOVE 1234567                 TO LARGE-INT.
053100     MOVE 300                     TO L-VCHAR-LENGTH.
053200     MOVE WS-LONG-VARCHAR-TEXT    TO L-VCHAR-DATA.
053300
053400***************************************************
053500*  MOVE ZERO TO NULL INDICATOR FIELDS TO INDICATE NOT NULL
053600
053700     MOVE 0                     TO  FIXED-CHAR-IND.
053800     MOVE 0                     TO  DATE-OUT-IND.
053900     MOVE 0                     TO  VAR-CHAR-IND.
054000     MOVE 0                     TO  SMALL-INT-IND.
054100     MOVE 0                     TO  PACKED-DEC-IND.
054200     MOVE 0                     TO  TIME-OUT-IND.
054300     MOVE 0                     TO  TIMESTAMP-IND.
054400     MOVE 0                     TO  FLOAT-SGL-IND.
054500     MOVE 0                     TO  FLOAT-DBL-IND.
054600     MOVE 0                     TO  LARGE-INT-IND.
054700     MOVE 0                     TO  LARGE-VCHAR-IND.
054800
054900 5300-EXIT.
055000     EXIT.
055100
055200
055300*-------------------------------------------------------*
055400 5400-LOAD-A-NULL-ROW.
055500*-------------------------------------------------------*
055600
055700***************************************************
055800*  MOVE -1 TO NULL INDICATOR FIELDS TO INDICATE NULL
055900*    LEFTOVER DATA IN DATA FIELDS WILL BE IGNORED
056000
056100     MOVE -1                    TO  FIXED-CHAR-IND.
056200     MOVE -1                    TO  DATE-OUT-IND.
056300     MOVE -1                    TO  VAR-CHAR-IND.
056400     MOVE -1                    TO  SMALL-INT-IND.
056500     MOVE -1                    TO  PACKED-DEC-IND.
056600     MOVE -1                    TO  TIME-OUT-IND.
056700     MOVE -1                    TO  TIMESTAMP-IND.
056800     MOVE -1                    TO  FLOAT-SGL-IND.
056900     MOVE -1                    TO  FLOAT-DBL-IND.
057000     MOVE -1                    TO  LARGE-INT-IND.
057100     MOVE -1                    TO  LARGE-VCHAR-IND.
057200
057300 5400-EXIT.
057400     EXIT.
057500
057600
057700*-------------------------------------------------------*
057800 5500-SEND-A-ROW.
057900*-------------------------------------------------------*
058000
058100*********************************************************
058200*  EACH PUTPIPE GENERATES ONE IXF DATA RECORD/ROW
058300
058400     CALL 'PUTPIPE'               USING SPAREA.
058500
058600     IF SPRC IS NOT EQUAL TO '000'
058700         MOVE WS-PUTPIPE          TO ERROR1-CALL
058800         PERFORM 9800-PIPE-ERROR-MSG THRU 9800-EXIT
058900         GO TO 9999-RETURN-TO-CALLER.
059000
059100 5500-EXIT.
059200     EXIT.
059300
059400
059500*-------------------------------------------------------*
059600 9000-WRAP-UP.
059700*-------------------------------------------------------*
059800
059900     PERFORM 9200-CLOSE-PIPE      THRU 9200-EXIT.
060000
060100     PERFORM 9900-ALL-DONE        THRU 9900-EXIT.
060200
060300 9000-EXIT.
060400     EXIT.
060500
060600
060700*-------------------------------------------------------*
060800 9200-CLOSE-PIPE.
060900*-------------------------------------------------------*
061000
061100     CALL 'CLOSPIPE'              USING SPAREA.
061200
061300     IF SPRC IS NOT EQUAL TO '000'
061400         MOVE WS-CLOSPIPE         TO ERROR1-CALL
061500         PERFORM 9800-PIPE-ERROR-MSG THRU 9800-EXIT
061600         GO TO 9999-RETURN-TO-CALLER.
061700
061800 9200-EXIT.
061900     EXIT.
062000
062100
062200*-------------------------------------------------------*
062300 9800-PIPE-ERROR-MSG.
062400*-------------------------------------------------------*
062500
062600********************************************************
062700*  IF NO ERRORS, MOVE 'OK' TO SPSTATUS BEFORE CALLING MESSAGE
062800*  IF ERRORS, MOVE 'E' TO SPSTATUS (SPCODE IN IGNORED)
062900*  EITHER WAY MOVE UP TO A 100 CHAR MESSAGE INTO SPMSG
063000
063100     MOVE SPRC                    TO ERROR1-SPRC.
063200     MOVE ERROR1-MSG              TO SPMSG.
063300     MOVE 'E'                     TO SPSTATUS.
063400
063500     CALL 'MESSAGE' USING SPAREA.
063600
063700 9800-EXIT.
063800     EXIT.
063900
064000
064100*-------------------------------------------------------*
064200 9810-ERROR-MSG.
064300*-------------------------------------------------------*
064400
064500     MOVE ERROR2-MSG              TO SPMSG.
064600     MOVE 'E'                     TO SPSTATUS.
064700     CALL 'MESSAGE' USING SPAREA.
064800
064900 9810-EXIT.
065000     EXIT.
065100
065200
065300*-------------------------------------------------------*
065400 9900-ALL-DONE.
065500*-------------------------------------------------------*
065600
065700********************************************************
065800*  IF NO ERRORS, MOVE 'OK' TO SPSTATUS BEFORE CALLING STATUS
065900*  IF ERRORS, MOVE 'E' TO SPSTATUS BEFORE CALLING STATUS
066000*    CAN MOVE UP TO 8 CHARS INTO SPCODE (SPMSG IS IGNORED)
066100*    BUT EITHER WAY ALWAYS CALL STATUS AFTER CLOSPIPE
066200
066300     MOVE 'OK'                        TO SPSTATUS.
066400     CALL 'STATUS' USING SPAREA.
066500
066600 9900-EXIT.
066700     EXIT.
066800
066900
067000*-------------------------------------------------------*
067100 9999-RETURN-TO-CALLER.
067200*-------------------------------------------------------*
067300
067400********************************************************
067500*  FOR EMERGENCY BAIL-OUT
067600
067700     EXEC CICS
067800          RETURN
067900          END-EXEC.
068000
068100 9999-EXIT.
068200     EXIT.



[#]Home  [*]Top

© Copyright 2008, Sybase Inc.