COBOL access Oracle database sample


This is a sample program how COBOL access Oracle database.


Table Definition

SQL> desc tab;
 Name                                      Null?    Type
 ----------------------------------------- -------- --------------------
 A                                         NOT NULL NUMBER(6)
 B                                                  CHAR(10)
 C                                                  NUMBER(6)


COBOL Program

This program demos the Oracle INSERT and SELECT statement.


$ cat ACCESSORA.pco
       IDENTIFICATION DIVISION.
       PROGRAM-ID. ACCESSORA.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

           EXEC SQL BEGIN DECLARE SECTION END-EXEC.
       01 USERNAME PIC X(010).
       01 PASSWD PIC X(010).
       01 DBSTRING PIC X(020).

       01 SQL-DB-STATE PIC X(5).

       01 H-O-A       PIC S9(6) COMP-3.
       01 H-O-B       PIC X(10).
       01 H-O-C       PIC S9(6) COMP-3.

       01 H-I-A       PIC S9(6) COMP-3.
           EXEC SQL END DECLARE SECTION END-EXEC.

           EXEC SQL INCLUDE "SQLCA.cpy" END-EXEC.

       PROCEDURE DIVISION.

       BEGIN-PGM.
           EXEC SQL WHENEVER SQLERROR
            DO PERFORM SQL-ERROR
           END-EXEC.

           PERFORM LOGON.

           EXEC SQL WHENEVER NOT FOUND
            GOTO NO-CUST
           END-EXEC.

*     *INSERT A RECORD
           MOVE 2 TO H-O-A.
           MOVE "BBBBBBBBB" TO H-O-B.
           MOVE 222222 TO H-O-C.
           EXEC SQL
            INSERT INTO TAB(A,B,C)
            VALUES(2
                  , :H-O-B
                  , :H-O-C)
           END-EXEC.

*     *SELECT A RECORD
           MOVE 2 TO H-I-A.
           MOVE ZEROS TO H-O-A.
           MOVE ZEROS TO H-O-B.
           MOVE ZEROS TO H-O-C.
           MOVE SQLSTATE TO SQL-DB-STATE.

           EXEC SQL
            SELECT A,
                   B,
                   C
            INTO :H-O-A, :H-O-B, :H-O-C
            FROM TAB 
            WHERE A = :H-I-A
           END-EXEC.

           PERFORM DISPLAY-INFO.
           PERFORM LOGOUT.

       NO-CUST.
           DISPLAY "NOT A VALID CUST CODE - TRY AGAIN".
           PERFORM LOGOUT.

       LOGON.
           MOVE "scott" TO USERNAME.
           MOVE "tiger" TO PASSWD.
           MOVE "orcl" TO DBSTRING.
           EXEC SQL
            CONNECT :USERNAME IDENTIFIED BY :PASSWD
            USING :DBSTRING
           END-EXEC.
           DISPLAY "SQLCODE: ", SQLCODE OF SQLCA.
           DISPLAY "CONNECTED TO DATABASE ", DBSTRING.

       DISPLAY-INFO.
           DISPLAY "SQLCODE: ", SQLCODE OF SQLCA.
           DISPLAY "RECORD:".
           DISPLAY "    A:"  H-O-A.
           DISPLAY "    B:"  H-O-B.   
           DISPLAY "    C:"  H-O-C.    

       LOGOUT.
           DISPLAY "HAVE A GOOD DAY.".
           EXEC SQL COMMIT WORK RELEASE END-EXEC.
           STOP RUN.

       SQL-ERROR.
           EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.
           DISPLAY "ORACLE ERROR DETECTED:".
           DISPLAY SQLERRMC.
           EXEC SQL ROLLBACK WORK RELEASE END-EXEC.
           STOP RUN.


Compile


#Pre-processor
procob include=COPY iname=ACCESSORA.pco release_cursor=no hold_cursor=no \
       mode=oracle sqlcheck=syntax common_parser=yes lname=ACCESSORA.lis \
       oname=ACCESSORA.cbl declare_section=no varchar=yes format=variable \
       ireclen=300 db2_array=yes picx=char unsafe_null=yes dbms=v8 \
       close_on_commit=no errors=yes end_of_fetch=100

#Compile
cob -ug ACCESSORA.cob -C "use(../common/opt.dir)" -C "list(ACCESSORA.lst)" \
    -C XREF -C SETTINGS


Run

$ rtsora ACCESSORA       
SQLCODE: +0000000000
CONNECTED TO DATABASE orcl                
SQLCODE: +0000000000
RECORD:
    A:+000002
    B:BBBBBBBBB 
    C:+222222
HAVE A GOOD DAY.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值