*************************************************************************
**
** Source File Name = expsamp.sqb 1.3
**
** Licensed Materials - Property of IBM
**
** (C) COPYRIGHT International Business Machines Corp. 1995, 1999
** All Rights Reserved.
**
** US Government Users Restricted Rights - Use, duplication or
** disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
**
**
** PURPOSE:
** This program is an example of how APIs are implemented in order to
** export and import tables and table data to DRDA database.
** The order of the program is as follows
** - export a table to an IXF file format
** - import the IXF file to a DB2 DRDA database table
** This program needs the embedded SQL calls in order to connect to
** an existing database, then to create a temporary table to work with.
**
** APIs USED :
** IMPORT TO sqlgimpr
** EXPORT sqlgexpr
**
** For DRDA database imports, the data file format MUST be of the IXF
** form. The IMPORT command must be issued an "INSERT" statement
**
** For more information about these samples see the README file.
**
** For more information on programming in COBOL, see the:
** - "Programming in COBOL" section of the Application Development Guide.
**
** For more information on Building COBOL Applications, see the:
** - "Building COBOL Applications" section of the Application Building Guide.
**
** For more information on the SQL language see the SQL Reference.
**
*************************************************************************
Identification Division.
Program-ID. "expsamp".
Data Division.
Working-Storage Section.
copy "sqlenv.cbl".
copy "sqlca.cbl".
copy "sqlutil.cbl".
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
77 statement pic x(254).
01 userid pic x(8).
01 passwd.
49 passwd-length pic s9(4) comp-5 value 0.
49 passwd-name pic x(18).
77 drdadb pic x(8).
01 drdaid pic x(8).
01 drdapwd.
49 drdapwd-length pic s9(4) comp-5 value 0.
49 drdapwd-name pic x(18).
EXEC SQL END DECLARE SECTION END-EXEC.
77 errloc pic x(80).
77 rc pic s9(9) comp-5.
77 stmt pic x(254) value "select * from staff".
77 impstmt pic x(254) value "create into impstaff".
77 stmt2 pic x(254) value "select * from org".
77 impstmt2 pic x(254) value "create into imporg".
77 datafile pic x(10) value "EXPTBL.IXF".
77 datafile-len pic 9(4) comp-5 value 10.
77 datafile2 pic x(10) value "EXPTB2.IXF".
77 datafile2-len pic 9(4) comp-5 value 10.
77 msgfile-x pic x(10) value "EXPMSG.TXT".
77 msgfile-x-len pic 9(4) comp-5 value 10.
77 msgfile-m pic x(10) value "IMPMSG.TXT".
77 msgfile-m-len pic 9(4) comp-5 value 10.
77 fileformat pic x(3) value "IXF".
77 fileformat-len pic 9(4) comp-5 value 3.
Procedure Division.
expsamp Section.
display "Sample COBOL program: EXPSAMP".
display "Enter your user id : " with no advancing.
accept userid.
display "Enter your password : " with no advancing.
accept passwd-name.
inspect passwd-name tallying passwd-length for characters
before initial " ".
display "Enter the DRDA database name : " with no advancing.
accept drdadb.
display "Enter the DRDA username : " with no advancing.
accept drdaid.
display "Enter the DRDA password : " with no advancing.
accept drdapwd-name.
inspect drdapwd-name tallying drdapwd-length for characters
before initial " ".
display " ".
* need to preset the size of structure field and counts
move SQLUEXPT-OUT-SIZE to SQL-SIZE-OF-UEXPT-OUT.
move 0 to SQL-COMMITCNT.
move 0 to SQL-RESTARTCNT.
move stmt to SQL-TCOLSTRG-DATA.
move 254 to SQL-TCOLSTRG-LEN.
move SQL-METH-D to SQL-DCOLMETH.
* connecting to SAMPLE database.
EXEC SQL CONNECT TO sample USER :userid USING :passwd
END-EXEC.
move "CONNECT TO SAMPLE" to errloc.
call "checkerr" using SQLCA errloc.
display "exporting STAFF table into file : ", datafile.
*********************
* EXPORT API called *
*********************
call "sqlgexpr" using
by value datafile-len
by value fileformat-len
by value msgfile-x-len
by reference datafile
by value 0
by value 0
by reference SQL-DCOLDATA
by reference SQL-TCOLSTRG
by reference fileformat
by reference SQL-FILETMOD
by reference msgfile-x
by value SQLU-INITIAL
by reference SQL-UEXPT-OUT
by value 0
by reference sqlca
returning rc.
move "exporting table" to errloc.
call "checkerr" using SQLCA errloc.
display "rows exported : ", SQL-ROWSEXPORTED.
move stmt2 to SQL-TCOLSTRG-DATA.
display "exporting ORG table into file : ", datafile2.
*********************
* EXPORT API called *
*********************
call "sqlgexpr" using
by value datafile2-len
by value fileformat-len
by value msgfile-x-len
by reference datafile2
by value 0
by value 0
by reference SQL-DCOLDATA
by reference SQL-TCOLSTRG
by reference fileformat
by reference SQL-FILETMOD
by reference msgfile-x
by value SQLU-INITIAL
by reference SQL-UEXPT-OUT
by value 0
by reference sqlca
returning rc.
move "exporting table" to errloc.
call "checkerr" using SQLCA errloc.
display "rows exported : ", SQL-ROWSEXPORTED.
display "connect to DRDA".
EXEC SQL CONNECT TO :drdadb USER :drdaid USING :drdapwd
END-EXEC.
move "CONNECT TO DRDA DB" to errloc.
call "checkerr" using SQLCA errloc.
* drop tables before creating them, just in case they already exist
move "drop table impstaff" to statement.
EXEC SQL EXECUTE IMMEDIATE :statement END-EXEC.
move "drop table imporg" to statement.
EXEC SQL EXECUTE IMMEDIATE :statement END-EXEC.
move "DROP index SAMPLE.TESTIND" to statement.
EXEC SQL EXECUTE IMMEDIATE :statement END-EXEC;
move "COMMIT the DROP TABLE" to errloc.
EXEC SQL COMMIT END-EXEC.
move "DROP TABLE" to errloc.
call "checkerr" using SQLCA errloc.
* create a temporary tables to import into
* display "create a temporary table 'impstaff' to import into".
* EXEC SQL CREATE TABLE impstaff (id smallint, name varchar(9),
* dept smallint, job char(5), years smallint, salary
* decimal(7,2),comm decimal(7,2)) END-EXEC.
* move "create table impstaff" to errloc.
* call "checkerr" using SQLCA errloc.
* display "create a temporary table 'imporg' to import into".
* EXEC SQL CREATE TABLE imporg (deptnumb smallint, deptname
* varchar(14), manager smallint, division varchar(10), location
* varchar(13)) END-EXEC.
* move "create table imporg" to errloc.
* call "checkerr" using SQLCA errloc.
* EXEC SQL COMMIT END-EXEC.
* move "COMMIT the CREATE TABLE" to errloc.
* call "checkerr" using SQLCA errloc.
* need to preset the size of structure field and counts
move SQLUIMPT-IN-SIZE to SQL-SIZE-OF-UIMPT-IN.
move SQLUIMPT-OUT-SIZE to SQL-SIZE-OF-UIMPT-OUT.
move 0 to SQL-COMMITCNT.
move 0 to SQL-RESTARTCNT.
move impstmt to SQL-TCOLSTRG-DATA.
move 254 to SQL-TCOLSTRG-LEN.
move SQL-METH-D to SQL-DCOLMETH.
display "importing the file ", datafile, " into 'impstaff'".
*********************
* IMPORT API called *
*********************
call "sqlgimpr" using
by value datafile-len
by value fileformat-len
by value msgfile-m-len
by reference datafile
by value 0
by reference SQL-DCOLDATA
by reference SQL-TCOLSTRG
by reference fileformat
by reference SQL-FILETMOD
by reference msgfile-m
by value SQLU-INITIAL
by reference SQL-UIMPT-IN
by reference SQL-UIMPT-OUT
by value 0
by value 0
by reference sqlca
returning rc.
move "importing table" to errloc.
call "checkerr" using SQLCA errloc.
display "rows imported : ", SQL-ROWSINSERTED.
display "rows committed : ", SQL-ROWSCOMMITTED.
move impstmt2 to SQL-TCOLSTRG-DATA.
display "importing the file ", datafile2, " into 'imporg'".
*********************
* IMPORT API called *
*********************
call "sqlgimpr" using
by value datafile2-len
by value fileformat-len
by value msgfile-m-len
by reference datafile2
by value 0
by reference SQL-DCOLDATA
by reference SQL-TCOLSTRG
by reference fileformat
by reference SQL-FILETMOD
by reference msgfile-m
by value SQLU-INITIAL
by reference SQL-UIMPT-IN
by reference SQL-UIMPT-OUT
by value 0
by value 0
by reference sqlca
returning rc.
move "importing table" to errloc.
call "checkerr" using SQLCA errloc.
display "rows imported : ", SQL-ROWSINSERTED.
display "rows committed : ", SQL-ROWSCOMMITTED.
EXEC SQL CONNECT RESET END-EXEC.
move "CONNECT RESET" to errloc.
call "checkerr" using SQLCA errloc.
End-expsamp. stop run.