A Sample Programs
This appendix includes sample Access Manager programs that are written in C, COBOL, and RPG. The following sample programs are included:
Sample Access Manager C Program
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
/*---------------------------------------------------------------*/
/* */
/* Program Name: SAMP1C */
/* */
/* Function: Insert a sample row into the DEPT table */
/* */
/* Author: Oracle Corporation */
/* Date: 8/25/95 */
/* */
/*---------------------------------------------------------------*/
#ifdef TRUE
# undef TRUE
#endif
#define TRUE 1
EXEC SQL INCLUDE sqlca;
struct sqlca *sca;
main()
{
EXEC SQL BEGIN DECLARE SECTION;
char server??(10??);
char username??(10??);
char password??(10??);
long int deptno;
char dname??(14??);
char loc??(13??);
char sql_stmt??(80??);
EXEC SQL END DECLARE SECTION;
long int rc;
EXEC SQL WHENEVER SQLERROR GOTO big_error;
EXEC SQL WHENEVER SQLWARNING GOTO big_warn;
printf("Entering test SAMP1C...\n");
/*
strcpy(server, "GENERIC");
strcpy(username, "SCOTT");
strcpy(password, "TIGER");
EXEC SQL CONNECT TO :server USER :username USING :password;
*/
printf("After implicit connect.\n");
strcpy(sql_stmt,
"INSERT INTO DEPT VALUES (?,?,?)");
EXEC SQL PREPARE S FROM :sql_stmt;
printf("After prepare.\n");
deptno = 88;
strcpy(dname, "SAMP1 C");
strcpy(loc, "Success");
EXEC SQL EXECUTE S USING :deptno, :dname, :loc;
printf("After execute.\n");
EXEC SQL RELEASE CURRENT;
printf("After release current.\n");
EXEC SQL COMMIT;
printf("After commit.\n");
printf("Exiting test SAMP1C...\n");
exit(0);
big_warn:
EXEC SQL WHENEVER SQLWARNING CONTINUE;
printf("Big warn\n");
big_error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("Big error!: SQLCA...\n");
printf(" sqlcaid =%0.8s.\n",sqlca.sqlcaid);
printf(" sqlcabc =%d.\n",sqlca.sqlcabc);
printf(" sqlcode =%d.\n",sqlca.sqlcode);
printf(" sqlerrml =%d.\n",sqlca.sqlerrml);
printf(" sqlerrmc =%0.70s.\n",sqlca.sqlerrmc);
printf(" sqlerrp =%0.8s.\n",sqlca.sqlerrp);
printf(" sqlerrd =%d %d %d %d %d %d\n",sqlca.sqlerrd??(0??),
sqlca.sqlerrd??(1??),sqlca.sqlerrd??(2??),
sqlca.sqlerrd??(3??),sqlca.sqlerrd??(4??),
sqlca.sqlerrd??(5??));
printf(" sqlwarn =%0.11s.\n",sqlca.sqlwarn);
printf(" sqlstate =%0.5s.\n",sqlca.sqlstate);
exit(1);
not_found:
exit(0);
}
Sample Access Manager COBOL Program
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMP1CBL.
AUTHOR. Oracle.
INSTALLATION. Oracle Corporation.
DATE-WRITTEN. August 25, 1995.
DATE-COMPILED.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-AS400.
OBJECT-COMPUTER. IBM-AS400.
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
77 SERVER-NAME PIC X(10).
77 USER-NAME PIC X(10).
77 USER-PASSWORD PIC X(10).
* Anything going into a NUMERIC, DECIMAL, SMALLINT, INTEGER
* column MUST have a sign.
* DEPTNO in the following is a four-byte zoned decimal number
* with the sign in the "zone" portion of the right hand character
77 DEPNO PIC S9(4).
77 DEPTNAME PIC X(14).
77 MISC PIC X(13).
77 SQQL-STATEMENT PIC X(100).
EXEC SQL END DECLARE SECTION END-EXEC.
EXEC SQL INCLUDE SQLCA END-EXEC.
77 CONV1 PIC S999999999 SIGN IS LEADING SEPARATE.
77 CONV2 PIC S999999999 SIGN IS LEADING SEPARATE.
77 CONV3 PIC S999999999 SIGN IS LEADING SEPARATE.
PROCEDURE DIVISION.
P1NTVLE-INIT.
MOVE "GENERIC" TO SERVER-NAME.
MOVE "SCOTT" TO USER-NAME.
MOVE "TIGER" TO USER-PASSWORD.
MOVE SPACES TO SQLERRMC.
EXEC SQL WHENEVER SQLERROR GO TO BIG-ERROR END-EXEC.
EXEC SQL WHENEVER SQLWARNING GO TO BIG-WARNING END-EXEC.
P1NTVLE-CONNECT.
DISPLAY "Connected implicitly...".
P1NTVLE-PREPARE.
MOVE "Insert into DEPT VALUES(?,?,?)" to SQQL-STATEMENT.
DISPLAY " " SQQL-STATEMENT.
EXEC SQL PREPARE S FROM :SQQL-STATEMENT END-EXEC.
DISPLAY "Prepared ...".
P1NTVLE-EXECUTE.
MOVE 88 TO DEPNO.
MOVE "SAMP1 CBL" TO DEPTNAME.
MOVE "Success" to MISC.
EXEC SQL EXECUTE S USING :DEPNO, :DEPTNAME, :MISC END-EXEC.
DISPLAY "Executed...".
P1LE-RELEASE.
EXEC SQL RELEASE CURRENT END-EXEC.
DISPLAY "Released current...".
P1LE-COMMIT.
EXEC SQL COMMIT END-EXEC.
DISPLAY "Committing ...".
P1LE-END.
DISPLAY "Exiting ...".
STOP RUN.
BIG-ERROR.
Display "SQL Error ...".
PERFORM DUMP-SQLCA.
GO TO P1LE-END.
BIG-WARNING.
Display "SQL Warning ...".
PERFORM DUMP-SQLCA.
GO TO P1LE-END.
DUMP-SQLCA.
*Move binary fields to displayable fields for DISPLAY stmt.
MOVE SQLCODE TO CONV1. MOVE SQLSTATE TO CONV2.
DISPLAY " SQLCODE=" CONV1 ", SQLSTATE=" CONV2.
DISPLAY " SQLERRMC on following line ...".
DISPLAY " " SQLERRMC.
DISPLAY " SQLERRP=" SQLERRP.
MOVE SQLERRD(1) TO CONV1.
MOVE SQLERRD(2) TO CONV2.
MOVE SQLERRD(3) TO CONV3"
DISPLAY "SQLERRD(1)..SQLERRD(3)=" CONV1 " " CONV2
" " CONV3.
MOVE SQLERRD(4) TO CONV1.
MOVE SQLERRD(5) TO CONV2.
MOVE SQLERRD(6) TO CONV3.
DISPLAY "SQLERRD(4)..SQLERRD(6)=" CONV1 " " CONV2
" " CONV3.
DISPLAY "SQLWARN=" SQLWARN.
Sample Access Manager RPG Program
H
F* FILE DECLARATION FOR QPRINT
FQPRINT O F 132 PRINTER
DVARS DS
DDEPTNO 1 4b 0
DHOSTDN 5 8b 0
DSERVER 9 18
DUSERNM 19 28
DPASSWD 29 38
DSTMSQL 39 118
DSTR 119 198 DIM(80)
DSTMT1 C 'Insert into DEPT -
D VALUES(88,''SAMP1 RPG'',''Success'')'
C MOVE *BLANKS STR
C CLEAR SQLCA
C*PUT OUT "ENTERING TEST P1..." MESSAGE
C MOVEL(P) 'GENERIC' SERVER
C MOVEL(P) 'SCOTT' USERNM
C MOVEL(P) 'TIGER' PASSWD
C MOVEL(P) STMT1 STMSQL
C EXCEPT NTRP1
C EXCEPT NTRP2
C/EXEC SQL
C+ WHENEVER SQLERROR GOTO BIGERR
C/END-EXEC
C/EXEC SQL
C+ WHENEVER SQLWARNING GOTO BIGWRN
C/END-EXEC
C*EXEC SQL
C* CONNECT TO :SERVER USER :USERNM USING :PASSWD
C* CONNECT
C*END-EXEC
C* PUT OUT "CONNECTED IMPLICITLY" MESSAGE...
C EXCEPT CNCTD
C/EXEC SQL PREPARE S FROM :STMSQL
C/END-EXEC
C* PUT OUT "AFTER PREPARE" MESSAGE
C EXCEPT PRPAF
C* NOW DO THE EXECUTE OF THE SQL STATEMENT AND PUT OUT MESSAGE
C/EXEC SQL EXECUTE S
C/END-EXEC
C EXCEPT XEQAF
C* NOW DO THE RELEASE OF THE SERVER AND PUT OUT MESSAGE
C/EXEC SQL RELEASE CURRENT
C/END-EXEC
C EXCEPT RLSAF
C* NOW DO THE COMMIT AND PUT OUT MESSAGE ...
C/EXEC SQL COMMIT
C/END-EXEC
C EXCEPT CMTAF
C* AND NOW WE ARE GOING TO EXIT ...
C EXCEPT XITNW
C GOTO FINISH
C*
C BIGWRN TAG
C/EXEC SQL WHENEVER SQLWARNING CONTINUE
C/END-EXEC
C EXCEPT WRNMSG
C EXSR PSQLCA
C GOTO FINISH
C*
C BIGERR TAG
C/EXEC SQL WHENEVER SQLERROR CONTINUE
C/END-EXEC
C EXCEPT ERRMSG
C EXSR PSQLCA
C GOTO FINISH
C*
C FINISH TAG
C SETON LR
C*
CSR PSQLCA BEGSR
C EXCEPT SQLCA1
C EXCEPT SQLCA2
C EXCEPT SQLCA3
C EXCEPT SQLCA4
C EXCEPT SQLCA5
C EXCEPT SQLCA6
CSR ENDSR
C*
OQPRINT E NTRP1 1
O 'Entering SAMP1RPG...'
O E NTRP2 1
O 7 'STMSQL='
O STMSQL
O E CNCTD 1
O 'CONNECTED IMPLICITLY'
O E PRPAF 1
O 'AFTER PREPARE'
O E XEQAF 1
O 'AFTER EXECUTE'
O E RLSAF 1
O 'AFTER RELEASE CURRENT'
O E CMTAF 1
O 'AFTER COMMIT'
O E XITNW 1
O 'EXITING SAMP1 RPG'
O E WRNMSG 1
O 'BIG WARN:SQLCA...'
O E ERRMSG 1
O 'BIG ERROR:SQLCA...'
O E SQLCA1 1
O 8 ' SQLAID='
O SQLAID +0
O +0 ', SQLABC='
O SQLABC +0
O +0 ', SQLCOD='
O SQLCOD +0L
O +0 ', SQLERL='
O SQLERL +0
O E SQLCA2 1
O 8 ' SQLERM='
O SQLERM +0
O E SQLCA3 1
O 8 ' SQLERP='
O SQLERP +0
O E SQLCA4 1
O 16 ' SQLER1..SQLER3='
O SQLER1 +0L
O SQLER2 +1L
O SQLER3 +1L
O E SQLCA5 1
O 16 ' SQLER4..SQLER6='
O SQLER4 +0L
O SQLER5 +1L
O SQLER6 +1L
O E SQLCA6 1
O 8 ' SQLWRN='
O SQLWRN +0
O +0 ', SQLSTT='
O SQLSTT +0