cobol 上的外部存储过程 db2

Posted

技术标签:

【中文标题】cobol 上的外部存储过程 db2【英文标题】:external stored procedure db2 on cobol 【发布时间】:2017-11-09 07:31:32 【问题描述】:

我想问一下在 cobol z/os 上调用外部存储过程 这是我的代码,存储过程代码

  *----------------------------------------------------------------*
   IDENTIFICATION DIVISION.
  *----------------------------------------------------------------*

   PROGRAM-ID.    SPROC02.
   AUTHOR.        AESANJA.
   DATE-WRITTEN.  19 OKT 2017.
   DATE-COMPILED.

   DATA DIVISION.
   WORKING-STORAGE SECTION.
  *************************************************************
  *INCLUDE SQLCA ITU SQL COMMUNICATION AREA                   *
  *SETIAP SELESAI MENJALANKAN SQL STATEMENT DAN SELESAI       *
  *NILAI AKAN BERUBAH                                         *
  *************************************************************
        EXEC SQL
             INCLUDE SQLCA
        END-EXEC.
  *************************************************************
  *INCLUDE DCLGEN NYA YANG DIGUNAKAN UNTUK AKSES DATABASE     *
  *MEMUNGKIKAN PROGRAM MELIHAT STRUKTUR TABLE DARI DATABASE   *
  *************************************************************
        EXEC SQL
             INCLUDE DAAVACDC
        END-EXEC.
  ************************************************************
   01 SP-SQLCODE                            PIC  9(9).
   01 SP-SQLSTATE                           PIC  9(9).
   LINKAGE SECTION.
   01 BRANCH                             PIC  X(07).
   01 ACCTNO                             PIC  X(11).
   01 AVAILABLE                          PIC  X(01).
   01 ADDTS                              PIC  X(26).
   01 ADDUSER                            PIC  X(08).
   01 ADDPROGRAM                         PIC  X(08).
   01 UPDTS                              PIC  X(26).
   01 UPDUSER                            PIC  X(08).
   01 UPDPROGRAM                         PIC  X(08).
   01 OUTCODE                            PIC S9(09) USAGE BINARY.
   PROCEDURE DIVISION USING BRANCH    ,
                            ACCTNO    ,
                            AVAILABLE ,
                            ADDTS     ,
                            ADDUSER   ,
                            ADDPROGRAM,
                            UPDTS     ,
                            UPDUSER   ,
                            UPDPROGRAM,
                            OUTCODE.
   MAIN-PROC.
       EXEC SQL
            SELECT *
            INTO :BRANCH    ,
                 :ACCTNO    ,
                 :AVAILABLE ,
                 :ADDTS     ,
                 :ADDUSER   ,
                 :ADDPROGRAM,
                 :UPDTS     ,
                 :UPDUSER   ,
                 :UPDPROGRAM
            FROM DAVACV0
            WHERE AVAC_BRANCH  = :BRANCH
              AND AVAC_ACCT_NO = :ACCTNO
       END-EXEC.
       MOVE SQLCODE TO OUTCODE.
   MAIN-PROC-RETURN.
       GOBACK.

然后这是我的 JCL 来预编译、编译、链接和绑定存储过程

//SPROCJCL JOB (999),CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),NOTIFY=&SYSUID,  JOB09854
//         REGION=4M
//JOBLIB DD DSN=DB2DEV.DSNUAT2.SDSNEXIT,DISP=SHR
//       DD DSN=DB2DEV.SDSNLOAD,DISP=SHR
//*--------------------------------------------------------------------*
//STEP01 EXEC DSN2HCOB,MEM=TEMPNAME,USER='CISUSER',
//   PARM.PC='HOST(IBMCOB),APOST,APOSTSQL,SOURCE,XREF',
//   PARM.COB=('OBJECT,APOST,MAP,XREF,NONUM,OFF,FLAG(I,E),TRUNC(BIN)', X
//             'RENT,RES,LIB,NODYNAM'),
//   PARM.LKED='RENT,REUS,LIST,XREF,LET,AMODE=31'
//*PLACE THE DCLGEN DSN
//PC.SYSLIB DD DSN=LCM.MNI.BCA.P.COPY,DISP=SHR
//*PLACE LOAD DBRMLIB
//PC.DBRMLIB DD DSN=IBS.BCA.DEV.DBRMLIB(SPROC02),DISP=SHR
//*PLACE THE SOURCE CODE OF STORED PROCEDURE
//PC.SYSIN DD DSN=AESANJA.LEARN.DB2(SPROC02),DISP=SHR
//*--------------------------------------------------------------------*
//*COPY BOOK OF THE DATA
//COB.SYSLIB DD DSN=LCM.MNI.BCA.P.COPY,DISP=SHR
//*--------------------------------------------------------------------*
//LKED.SYSLIB DD DSN=SYS1.CEE.SCEELKED,DISP=SHR
//            DD DSN=DB2DEV.SDSNLOAD,DISP=SHR
//LKED.SYSLMOD DD DSN=AESANJA.LEARN.LOAD(SPROC02),DISP=SHR
//LKED.SYSIN DD *
      INCLUDE SYSLIB(DSNALI)
      MODE AMODE(31) RMODE(ANY)
//*--------------------------------------------------------------------*
//SQLBIND  PROC
//BIND     EXEC PGM=IKJEFT01,DYNAMNBR=20
//DBRMLIB  DD   DSN=IBS.BCA.DEV.DBRMLIB,DISP=SHR
//STEPLIB  DD   DSN=DB2DEV.SDSNLOAD,DISP=SHR
//SYSTSPRT DD   SYSOUT=*
//SYSPRINT DD   SYSOUT=*
//SYSUDUMP DD   SYSOUT=*
//SYSOUT   DD   SYSOUT=*
//SYSIN    DD   DUMMY
//SYSTSIN  DD   DDNAME=SYSTSIN
//         PEND
//STEP2 EXEC SQLBIND
//****************************************************************
//* UBAH XXXXXXXX MENJADI NAMA PROGRAM
//****************************************************************
//BIND.SYSTSIN DD *
  DSN SYSTEM(DSN1)
  BIND PACKAGE(DPB_COLLID) -
       MEMBER(SPROC02)     -
       ACT(REP) ISO(UR) ENCODING(EBCDIC) -
       OWNER(CISUSER)
  END
  DSN SYSTEM(DSN1)
  BIND PLAN(SPROC02)              -
       OWNER(CISUSER)              -
       PKLIST(DPB_COLLID.SPROC02) -
       RETAIN                      -
       DYNAMICRULES(BIND)          -
       VALIDATE(BIND)              -
       ISOLATION(CS)               -
       ACQUIRE(USE)                -
       RELEASE(COMMIT)             -
       EXPLAIN(YES)
  END

然后我的 JCL 用于在系统表中定义存储过程

//CREASTPR JOB ,,CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),TIME=1440,           JOB15600
//         NOTIFY=&SYSUID,REGION=4M
//**********************************************************************
//* CREATE STORED PROCEDURE                                            *
//**********************************************************************
//JOBLIB   DD DSN=DB2DEV.SDSNLOAD,DISP=SHR
//         DD DSN=AESANJA.LEARN.LOAD,DISP=SHR
//STEP1   EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
 DSN SYSTEM(DSN1)
 RUN  PROGRAM(DSNTIAD) PLAN(DSNTIAD) -
      LIB('DSNBCA.RUNLIB.LOAD')
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN    DD *
  SET CURRENT SQLID='CISUSER';
   CREATE PROCEDURE CISUSER.SP02KE02
   (INOUT BRANCH          DECIMAL(7) ,
    INOUT ACCTNO          DECIMAL(11),
    OUT   AVAILABLE       CHAR(1)    ,
    OUT   ADDTS           TIMESTAMP  ,
    OUT   ADDUSER         CHAR(8)    ,
    OUT   ADDPROGRAM      CHAR(8)    ,
    OUT   UPDTS           TIMESTAMP  ,
    OUT   UPDUSER         CHAR(8)    ,
    OUT   UPDPROGRAM      CHAR(8)    ,
    OUT   OUTCODE         INTEGER    )
      LANGUAGE COBOL
      DETERMINISTIC
      READS SQL DATA
      EXTERNAL NAME 'SPROC02'
      COLLID DPB_COLLID
      ASUTIME NO LIMIT
      PARAMETER STYLE GENERAL
      STAY RESIDENT NO
      RUN OPTIONS 'MSGFILE(OUTFILE),RPTSTG(ON),RPTOPTS(ON)'
      WLM ENVIRONMENT ENV1DB2
      PROGRAM TYPE MAIN
      SECURITY DB2
      RESULT SETS 2
      COMMIT ON RETURN YES;

之后,这是我将调用存储过程的主程序代码

   *----------------------------------------------------------------*
   IDENTIFICATION DIVISION.
  *----------------------------------------------------------------*

   PROGRAM-ID.    COBA12.
   AUTHOR.        AESANJA.
   DATE-WRITTEN.  19 OKT 2017.
   DATE-COMPILED.

   DATA DIVISION.
   WORKING-STORAGE SECTION.
  *************************************************************
  *INCLUDE SQLCA ITU SQL COMMUNICATION AREA                   *
  *SETIAP SELESAI MENJALANKAN SQL STATEMENT DAN SELESAI       *
  *NILAI AKAN BERUBAH                                         *
  *************************************************************
   EXEC SQL
       INCLUDE SQLCA
   END-EXEC.
  *************************************************************
  *INCLUDE DCLGEN NYA YANG DIGUNAKAN UNTUK AKSES DATABASE     *
  *MEMUNGKIKAN PROGRAM MELIHAT STRUKTUR TABLE DARI DATABASE   *
  *************************************************************
   EXEC SQL
       INCLUDE DAAVACDC
   END-EXEC.
   77 SQLRETCODE PIC 9(9).
   01 WS-SQL-STORAGE.
      05 AVAC-BRANCH-NO PIC X(7).
      05 SQL-STATEMENT.
         49 SQL-STATEMENT-LEN PIC S9(4) COMP VALUE +320.
         49 SQL-STATEMENT-TEXT PIC X(320).
   01 BRANCH                             PIC  X(07).
   01 ACCTNO                             PIC  X(11).
   01 AVAILABLE                          PIC  X(01).
   01 ADDTS                              PIC  X(26).
   01 ADDUSER                            PIC  X(08).
   01 ADDPROGRAM                         PIC  X(08).
   01 UPDTS                              PIC  X(26).
   01 UPDUSER                            PIC  X(08).
   01 UPDPROGRAM                         PIC  X(08).
   01 OUTCODE                            PIC S9(9) USAGE COMP.
   PROCEDURE DIVISION.
   MAIN-PROC.
       MOVE 1 TO BRANCH.
       MOVE 3913 TO ACCTNO.
       EXEC SQL CALL CISUSER.SP02KE04(:BRANCH    ,
                                      :ACCTNO    ,
                                      :AVAILABLE ,
                                      :ADDTS     ,
                                      :ADDUSER   ,
                                      :ADDPROGRAM,
                                      :UPDTS     ,
                                      :UPDUSER   ,
                                      :UPDPROGRAM,
                                      :OUTCODE   )
       END-EXEC.
       DISPLAY "SP-DA-AVAC-BRANCH      " BRANCH.
       DISPLAY "SP-DA-AVAC-ACCT-NO     " ACCTNO.
       DISPLAY "SP-DA-AVAC-AVAILABLE   " AVAILABLE.
       DISPLAY "SP-DA-AVAC-ADD-TS      " ADDTS.
       DISPLAY "SP-DA-AVAC-ADD-USER    " ADDUSER.
       DISPLAY "SP-DA-AVAC-ADD-PROGRAM " ADDPROGRAM.
       DISPLAY "SP-DA-AVAC-UPD-TS      " UPDTS.
       DISPLAY "SP-DA-AVAC-UPD-USER    " UPDUSER.
       DISPLAY "OUT-CODE               " OUTCODE.

停止运行。

在我预编译、编译、链接我的程序后使用这个

//EXECUTE JOB (123),CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,MSGLEVEL=(1,1)
//*
//* -------------------------------------------------------------------
//* --- Cobol Compile - Batch or CICS                               ---
//* -------------------------------------------------------------------
//*
//* ---------------------------------------------------------- *//
//*    SCAN CODE FOR CICS, DB2 OR DLI .....                    *//
//* ---------------------------------------------------------- *//
//*
//DB2SCAN  EXEC PGM=IRXJCL,COND=(4,LT),
//            PARM='Ps-s-rCSCN COBA12'
//*
//SYSTSPRT DD  SYSOUT=*
//SYSEXEC  DD  DISP=SHR,DSN=CCCLCM.V600.BCA.CLIST
//SYSTSIN  DD  SYSOUT=*
//CBLSRC   DD  DSN=AESANJA.LEARN.DB2(COBA12),DISP=SHR
//CBLSRCO  DD DISP=(,PASS),DSN=&&SRCFULL,
//         SPACE=(CYL,(10,10),RLSE),
//         DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=0)
//DB2OPTS  DD *
  CBL SQL("HOST(IBMCOB),APOST,APOSTSQL")
  CBL SQL("DATE(ISO),TIME(ISO),LEVEL(DB2CIS)")
/*
//FILEOT   DD  DISP=(,PASS),DSN=&&TMPLNK,
//         SPACE=(TRK,(15,15)),UNIT=SYSDA,
//         DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120)
//*
//* ---------------------------------------------------------- *//
//*    COBOL COMPILE                                           *//
//*                                                            *//
//* ---------------------------------------------------------- *//
//COMPILE  EXEC PGM=IGYCRCTL,REGION=0M,
//   PARM=('DATA(31)','FLAG(I,E)',APOST,MAP,LIST,
//         'SIZE(24000K)',NOADV)
//STEPLIB  DD   DSN=ECOB.V4R2M0.SIGYCOMP,DISP=SHR
//         DD   DSN=DB2DEV.DSNUAT2.SDSNEXIT,DISP=SHR
//         DD   DSN=DB2DEV.SDSNLOAD,DISP=SHR
//         DD   DSN=CICSTS53.CICS.SDFHLOAD,DISP=SHR
//         DD   DSN=WMQ.V701.TLIB.SCSQLOAD,DISP=SHR
//SYSIN    DD   DATA
/*
//         DD   DSN=&&SRCFULL,DISP=(OLD,DELETE,DELETE)
//*
//SYSLIB   DD   DISP=SHR,DSN=LCM.DEFAULT.EMPTY.COPYLIB
//         DD   DISP=SHR,DSN=LCM.MNI.BCA.P.COPY
//         DD   DISP=SHR,DSN=LCM.DEFAULT.EMPTY.COPYLIB
//         DD   DISP=SHR,DSN=LCM.MNI.BCA.P.ONLCOPY
//         DD   DSN=WMQ.V701.TLIB.SCSQCOBC,DISP=SHR
//         DD   DISP=SHR,DSN=LCM.GGLM.GL312.P.COPY
//         DD   DISP=SHR,DSN=LCM.GGLM.P.COPY
//         DD   DISP=SHR,DSN=LCM.ATM.CMS.P.COPY
//         DD   DISP=SHR,DSN=LCM.ATM.L24.P.COPY
//         DD   DISP=SHR,DSN=ATMD.CARD.SOURCE
//         DD   DISP=SHR,DSN=ATMD.MNI.SOURCE
//         DD   DISP=SHR,DSN=EBSD.BCA.PROD.COPY
//         DD   DISP=SHR,DSN=EBSD.BCA.PROD.ONLCOPY
//         DD   DISP=SHR,DSN=IBS.UND.PROD.COPY
//         DD   DISP=SHR,DSN=LCM.KUX.P.COPY
//         DD   DISP=SHR,DSN=LCM.KUX.P.ONLCOPY
//*        DD   DISP=SHR,DSN=CARDD.LA10.COPYLIB.CX2091
//* REQUEST BY SGT 15 MAY 2015
//         DD   DISP=SHR,DSN=LCM.CARD.P.SCPYB
//         DD   DISP=SHR,DSN=LCM.CARD.P.SCPYC
//*             STLH CUT OFF CRD  11 JUL '13
//* LHM MEN+KAN DD   DISP=SHR,DSN=LCM.CARD.P.SCPYC 07 OCT 2013
//DBRMLIB  DD   DISP=SHR,DSN=IBS.BCA.DEV.DBRMLIB(COBA12)
//SYSLIN   DD   DISP=(,PASS),DSN=&&TMPOBJ,
//         UNIT=3390,SPACE=(TRK,(25,25)),
//         DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120)
//SYSPRINT DD   SYSOUT=*
//*
//SYSUT1   DD   UNIT=3390,SPACE=(CYL,(15,5))
//SYSUT2   DD   UNIT=3390,SPACE=(CYL,(15,5))
//SYSUT3   DD   UNIT=3390,SPACE=(CYL,(15,5))
//SYSUT4   DD   UNIT=3390,SPACE=(CYL,(15,5))
//SYSUT5   DD   UNIT=3390,SPACE=(CYL,(15,5))
//SYSUT6   DD   UNIT=3390,SPACE=(CYL,(15,5))
//SYSUT7   DD   UNIT=3390,SPACE=(CYL,(15,5))
//*
//*-------------------------------------------------------------------*
//*   LINKEDIT                                                        *
//*-------------------------------------------------------------------*
//LINK     IF   COMPILE.RC LE 4 THEN
//LINKEDIT EXEC PGM=HEWL,
//         PARM=(LIST,XREF,LET,'AC=0','SIZE=(512K,100K)',
//         'AMODE(31)','RMODE(ANY)',CALL)
//SYSUT1   DD   UNIT=3390,SPACE=(TRK,(15,5))
//SYSLMOD  DD   DSN=AESANJA.LEARN.LOAD(COBA12),DISP=SHR
//* SYSLIB   DD   DISP=(SHR,PASS),DSN=&&TMPOBJ
//SYSLIB   DD   DISP=SHR,DSN=AESANJA.LEARN.LOAD
//         DD   DSN=LCM.MNI.BCA.P.LOAD,DISP=SHR
//         DD   DSN=FISD.MILL30.LOAD,DISP=SHR
//         DD   DSN=FISD.MILL30.GL312.LOAD,DISP=SHR
//         DD   DSN=ATMD.BASE24.L24R512.PROD.CICSLOAD,DISP=SHR
//*        DD   DSN=WMQ.V701.TLIB.SCSQLOAD,DISP=SHR
//         DD   DSN=IMS.OTX.SDFSRESL,DISP=SHR
//         DD DISP=SHR,DSN=SYS1.CEE.SCEELKED
//           DD DISP=SHR,DSN=DB2DEV.SDSNLOAD
//           DD DISP=SHR,DSN=SYS1.LINKLIB
//CSQSTUB  DD   DSN=WMQ.V701.TLIB.SCSQLOAD,DISP=SHR
//CSQSTUB  DD   DSN=WMQ.V701.TLIB.SCSQLOAD,DISP=SHR
//TSTLIB   DD   DSN=AESANJA.LEARN.LOAD,DISP=SHR
//SYSPRINT DD SYSOUT=*
//OBJECT   DD   DISP=(SHR,PASS),DSN=&&TMPOBJ
//SYSLIN   DD   DISP=(SHR,PASS),DSN=&&TMPLNK
//         DD   *
/*
//LINK      ENDIF
//*

//*

最后我绑定了我的程序

//BIND     JOB REGION=4M,NOTIFY=&SYSUID,MSGLEVEL=(1,1)                  JOB15655
//SQLBIND  PROC
//BIND     EXEC PGM=IKJEFT01,DYNAMNBR=20
//DBRMLIB  DD   DSN=IBS.BCA.DEV.DBRMLIB,DISP=SHR
//STEPLIB  DD   DSN=DB2DEV.SDSNLOAD,DISP=SHR
//SYSTSPRT DD   SYSOUT=*
//SYSPRINT DD   SYSOUT=*
//SYSUDUMP DD   SYSOUT=*
//SYSOUT   DD   SYSOUT=*
//SYSIN    DD   DUMMY
//SYSTSIN  DD   DDNAME=SYSTSIN
//         PEND
//STEP2 EXEC SQLBIND
//****************************************************************
//* UBAH XXXXXXXX MENJADI NAMA PROGRAM
//****************************************************************
//BIND.SYSTSIN DD *
  DSN SYSTEM(DSN1)
  BIND PACKAGE(DPB_COLLID) -
       OWNER(CISUSER)      -
       MEMBER(COBA12)    -
       DYNAMICRULES(BIND)  -
       VALIDATE(BIND)      -
       ISOLATION(CS)       -
       RELEASE(COMMIT)     -
       EXPLAIN(YES)
  END
  DSN SYSTEM(DSN1)
  BIND PLAN(COBA13)              -
       OWNER(CISUSER)              -
       PKLIST(DPB_COLLID.COBA12) -
       RETAIN                      -
       DYNAMICRULES(BIND)          -
       VALIDATE(BIND)              -
       ISOLATION(CS)               -
       ACQUIRE(USE)                -
       RELEASE(COMMIT)             -
       EXPLAIN(YES)
  END

/*

然后我运行我的程序 使用这个

//DB200001  JOB CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID,MSGLEVEL=(1,1),       JOB22858
//     REGION=4M,TIME=1440
//*-----------------------------------------------------------
//CICCODE2 EXEC PGM=IKJEFT01
//STEPLIB  DD DSN=AESANJA.LEARN.LOAD,DISP=SHR
//         DD DSN=LCM.MNI.BCA.P.DB2LOAD,DISP=SHR
//         DD DSN=LCM.MNI.BCA.P.LOAD,DISP=SHR
//         DD DSN=DB2DEV.SDSNLOAD,DISP=SHR
//SYSTSPRT DD SYSOUT=A
//SYSUDUMP DD SYSOUT=A
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSERROR DD SYSOUT=*
//SYSOUT   DD SYSOUT=A
//SYSOUD   DD SYSOUT=*
//SYSTSIN  DD *
DSN SYSTEM(DSN1) RETRY(0) TEST(0)
RUN PROGRAM(COBA12) PLAN(COBA12) -
  LIB('AESANJA.LEARN.LOAD')

一切正常,我得到了用于编译的返回码 4,而在另一份工作中得到了 0 的返回码 然后coba12程序的显示没有显示我想要获取的其他数据

********************************* TOP OF DATA ************************************************************************************* 
SP-DA-AVAC-BRANCH      1                                                                                                            
SP-DA-AVAC-ACCT-NO     3913                                                                                                         
SP-DA-AVAC-AVAILABLE                                                                                                                
SP-DA-AVAC-ADD-TS                                                                                                                   
SP-DA-AVAC-ADD-USER                                                                                                                 
SP-DA-AVAC-ADD-PROGRAM                                                                                                              
SP-DA-AVAC-UPD-TS                                                                                                                   
SP-DA-AVAC-UPD-USER                                                                                                                 
OUT-CODE               000000000                                                                                                    
******************************** BOTTOM OF DATA *********************************************************************************** 

在此之前,我尝试在存储过程代码“sproc02”上显示一些内容 但它没有出现在 spool sysout 上,是不是我的存储过程没有被调用 或者我做错了 jcl / flow 换句话说,它不返回任何结果 非常感谢您的回答,谢谢:)

【问题讨论】:

COBA12 的来源在哪里?我只在示例中看到 COBA10 糟糕,我会将其编辑为 coba12。我忘记在这篇文章中重新编辑。但是主框架的源代码是coba 12 【参考方案1】:
  *----------------------------------------------------------------*
   IDENTIFICATION DIVISION.
  *----------------------------------------------------------------*

  PROGRAM-ID.    MAIN.
  AUTHOR.        DUMMY.
  
  DATA DIVISION.
  WORKING-STORAGE SECTION.
  01 BRANCH                             PIC  X(07).
  01 ACCTNO                             PIC  X(11).
  01 AVAILABLE                          PIC  X(01).
  01 ADDTS                              PIC  X(26).
  01 ADDUSER                            PIC  X(08).
  01 ADDPROGRAM                         PIC  X(08).
  01 UPDTS                              PIC  X(26).
  01 UPDUSER                            PIC  X(08).
  01 UPDPROGRAM                         PIC  X(08).
  01 OUTCODE                            PIC S9(09) USAGE BINARY.

  PROCEDURE DIVISION.
  
       MOVE 1    TO BRANCH.
       MOVE 3913 TO ACCTNO.

       CALL 'SPROC02' USING BRANCH    ,
                            ACCTNO    ,
                            AVAILABLE ,
                            ADDTS     ,
                            ADDUSER   ,
                            ADDPROGRAM,
                            UPDTS     ,
                            UPDUSER   ,
                            UPDPROGRAM,
                            OUTCODE.
                        
        EVALUATE OUTCODE
            WHEN +0
                 CONTINUE
            WHEN OTHER
                 DISPLAY 'ERROR CALL SPROC02 RC: ' OUTCODE
        END-EVALUATE.
        
        DISPLAY "SP-DA-AVAC-BRANCH      " BRANCH.
        DISPLAY "SP-DA-AVAC-ACCT-NO     " ACCTNO.
        DISPLAY "SP-DA-AVAC-AVAILABLE   " AVAILABLE.
        DISPLAY "SP-DA-AVAC-ADD-TS      " ADDTS.
        DISPLAY "SP-DA-AVAC-ADD-USER    " ADDUSER.
        DISPLAY "SP-DA-AVAC-ADD-PROGRAM " ADDPROGRAM.
        DISPLAY "SP-DA-AVAC-UPD-TS      " UPDTS.
        DISPLAY "SP-DA-AVAC-UPD-USER    " UPDUSER.
        DISPLAY "OUT-CODE               " OUTCODE.
        
        STOP RUN.

【讨论】:

以上是关于cobol 上的外部存储过程 db2的主要内容,如果未能解决你的问题,请参考以下文章

DB2 外部存储过程(JAVA)

从客户端调用 DB2 外部存储过程失败并显示 CPF9810

使用 IBM DB2 Connect 驱动程序调用 i 系列上的存储过程

db2存储过程

IBM i 上的外部存储过程

db2如何创建存储过程