美文网首页
procobol如何访问两个oracle数据库

procobol如何访问两个oracle数据库

作者: CodingCode | 来源:发表于2022-11-08 13:30 被阅读0次
  1. COBOL程序
$ cat SELECTORA.pco
*     * DATABASE TABLE DEFINITION
*     * CREATE TABLE TESTTAB(A CHAR(4) PRIMARY KEY)
*     * INSERT INTO TESTTAB VALUES('AAAA')
       IDENTIFICATION DIVISION.
       PROGRAM-ID. MULTISELECT.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.

           EXEC SQL BEGIN DECLARE SECTION END-EXEC.
       01 DBUSER    PIC X(005) VALUE "scott".
       01 DBPASS    PIC X(005) VALUE "tiger".
       01 DBSTRING  PIC X(010) VALUE "orcl01".
       01 DBNAME    PIC X(010) VALUE "db1".

       01 DBUSER2   PIC X(005) VALUE "scott".
       01 DBPASS2   PIC X(005) VALUE "tiger".
       01 DBSTRING2 PIC X(010) VALUE "orcl02".
       01 DBNAME2   PIC X(010) VALUE "db2".

       01 H-VALUE-A PIC X(4).
           EXEC SQL END DECLARE SECTION END-EXEC.

           EXEC SQL INCLUDE SQLCA END-EXEC.

       PROCEDURE DIVISION.
       BEGIN-PGM.

*     * CONNECT TO DB1
           EXEC SQL
              CONNECT :DBUSER IDENTIFIED BY :DBPASS
              AT :DBNAME USING :DBSTRING
           END-EXEC.
           IF SQLCODE = 0
             DISPLAY "RETURN OK"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
           ELSE IF SQLCODE = 100
             DISPLAY "NO DATA ROW IS FOUND"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
           ELSE IF SQLCODE = -2112
             DISPLAY "RETURN TOO MANY ROWS"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
           ELSE
             DISPLAY "ORACLE ERROR DETECTED:"
             DISPLAY "SQLCODE = " SQLCODE
             DISPLAY "SQLERRM = " SQLERRMC
           END-IF.

*     * CONNECT TO DB2
           EXEC SQL
              CONNECT :DBUSER2 IDENTIFIED BY :DBPASS2
              AT :DBNAME2  USING :DBSTRING2
           END-EXEC.
           IF SQLCODE = 0
             DISPLAY "RETURN OK"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
           ELSE IF SQLCODE = 100
             DISPLAY "NO DATA ROW IS FOUND"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
           ELSE IF SQLCODE = -2112
             DISPLAY "RETURN TOO MANY ROWS"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
           ELSE
             DISPLAY "ORACLE ERROR DETECTED:"
             DISPLAY "SQLCODE = " SQLCODE
             DISPLAY "SQLERRM = " SQLERRMC
           END-IF.


*     * SELECT FROM DB1
           EXEC SQL
              AT :DBNAME
              SELECT A
              INTO :H-VALUE-A
              FROM TESTTAB
           END-EXEC.
           IF SQLCODE = 0
             DISPLAY "RETURN OK"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
             PERFORM DISPLAY-INFOS
           ELSE IF SQLCODE = 100
             DISPLAY "NO DATA ROW IS FOUND"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
           ELSE IF SQLCODE = -2112
             DISPLAY "RETURN TOO MANY ROWS"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
           ELSE
             DISPLAY "ORACLE ERROR DETECTED:"
             DISPLAY "SQLCODE = " SQLCODE
             DISPLAY "SQLERRM = " SQLERRMC
           END-IF.

*     * SELECT FROM DB2
           EXEC SQL
              AT :DBNAME2
              SELECT A
              INTO :H-VALUE-A
              FROM TESTTAB
           END-EXEC.
           IF SQLCODE = 0
             DISPLAY "RETURN OK"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
             PERFORM DISPLAY-INFOS
           ELSE IF SQLCODE = 100
             DISPLAY "NO DATA ROW IS FOUND"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
           ELSE IF SQLCODE = -2112
             DISPLAY "RETURN TOO MANY ROWS"
             DISPLAY "RETURN ROWS: " SQLERRD(3)
           ELSE
             DISPLAY "ORACLE ERROR DETECTED:"
             DISPLAY "SQLCODE = " SQLCODE
             DISPLAY "SQLERRM = " SQLERRMC
           END-IF.

*     *    STOP RUN.
           GOBACK.

       DISPLAY-INFOS.
           DISPLAY "RETURN A="  H-VALUE-A.
  1. makefile
$ cat makefile
ORACLE_HOME=/home/oracle/app/oracle/product/19c/db_1

PGMS = SELECTORA

all: $(PGMS)

.SUFFIXES:  .pco .cbl
.PRECIOUS: %.cbl

.pco.cbl:
    procob $(PCCINCLUDE) iname='$*.pco' lname='$*.lis' oname='$*.cbl' release_cursor=no hold_cursor=no mode=oracle sqlcheck=syntax common_parser=yes declare_section=no picx=char

SELECTORA: SELECTORA.cbl
    cob -x -o $@ $< -L${ORACLE_HOME}/lib ${ORACLE_HOME}/precomp/lib/cobsqlintf.o -lclntsh

clean:
    -rm -rf *.o *.cbl *.lis *.int *.idy $(PGMS)
  1. 编译运行
$ make
$ ./SELECTORA

相关文章

网友评论

      本文标题:procobol如何访问两个oracle数据库

      本文链接:https://www.haomeiwen.com/subject/sflntdtx.html