/*******************************************************************************
**
** Source File Name = fillcli.sqc 1.6
**
** 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 :
** An stored procedure example which demonstrates the usage of SQLDA
** by passing information to the server procedure on which table to
** fill with random data. (server program : "fillsrv")
**
** EXTERNAL DEPENDENCIES :
** - Ensure existence of database for precompile purposes.
** - Precompile with the SQL precompiler (PREP in DB2)
** - Bind to a database (BIND in DB2)
** - Compile and link with the IBM Cset++ compiler (AIX and OS/2)
** or the Microsoft Visual C++ compiler (Windows)
** or the compiler supported on your platform.
**
** For more information about these samples see the README file.
**
** For more information on programming in C, see the:
** - "Programming in C and C++" section of the Application Development Guide
** For more information on Building C Applications, see the:
** - "Building C Applications" section of the Application Building Guide.
**
** For more information on the SQL language see the SQL Reference.
**
*******************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sql.h>
#include <sqlca.h>
#include <sqlda.h>
#include <sqlenv.h>
#include "util.h"
#define CHECKERR( CE_STRING ) if ( check_error( CE_STRING, &sqlca ) != 0 ) return -1 ;
int main( int argc, char * argv[] ) {
EXEC SQL INCLUDE SQLCA ;
EXEC SQL BEGIN DECLARE SECTION ;
char database[9] ;
char userid[9] ;
char passwd[19] ;
char procname[33] ;
char sql_buffer[255] ;
EXEC SQL END DECLARE SECTION ;
struct sqlda * client_sqlda, * server_sqlda ;
short org_columns, org_rows, i ;
if ( argc != 4 ) {
printf( "\nUSAGE: fillcli database userid passwd\n\n" ) ;
return( 1 ) ;
}
strcpy( database, argv[1] ) ;
strcpy( userid, argv[2] ) ;
strcpy( passwd, argv[3] ) ;
EXEC SQL CONNECT TO :database USER :userid USING :passwd ;
CHECKERR( "CONNECT TO SAMPLE" ) ;
printf( "\n" ) ;
init_da( &client_sqlda, 1 ) ;
init_da( &server_sqlda, 3 ) ;
server_sqlda->sqld = 3 ;
server_sqlda->sqlvar[0].sqltype = SQL_TYP_NCSTR ;
server_sqlda->sqlvar[0].sqllen = 15 ;
server_sqlda->sqlvar[1].sqltype = SQL_TYP_NSMALL ;
server_sqlda->sqlvar[1].sqllen = sizeof( short ) ;
server_sqlda->sqlvar[2].sqltype = SQL_TYP_NCSTR ;
server_sqlda->sqlvar[2].sqllen = 13 ;
alloc_host_vars( server_sqlda ) ;
strcpy( ( char * ) server_sqlda->sqlvar[0].sqldata, "INSERT" ) ;
org_rows = 10 ;
memcpy( ( void * ) server_sqlda->sqlvar[1].sqldata,
( void * ) &org_rows,
sizeof( short )
) ;
strcpy( ( char * ) server_sqlda->sqlvar[2].sqldata, "Tasmania" ) ;
memset( ( void * ) sql_buffer, 0, 255 ) ;
strcpy( sql_buffer, "SELECT * FROM ORG" ) ;
EXEC SQL PREPARE st FROM :sql_buffer ;
CHECKERR( "PREPARE SELECT FROM ORG" ) ;
EXEC SQL DESCRIBE st INTO :*client_sqlda ;
org_columns = client_sqlda->sqld ;
free( client_sqlda ) ;
if ( org_columns > 0 ) init_da( &client_sqlda, org_columns ) ;
EXEC SQL DESCRIBE st INTO :*client_sqlda ;
CHECKERR( "DESCRIBE DESCRIPTOR" ) ;
alloc_host_vars( client_sqlda ) ;
EXEC SQL DECLARE c1 CURSOR FOR st ;
EXEC SQL OPEN c1 ;
CHECKERR( "OPEN CURSOR" ) ;
EXEC SQL FETCH c1 USING DESCRIPTOR :*client_sqlda ;
CHECKERR( "OPEN CURSOR" ) ;
display_col_titles( client_sqlda ) ;
i = 0 ;
while ( SQLCODE == 0 ) {
display_da( client_sqlda ) ;
EXEC SQL FETCH c1 USING DESCRIPTOR :*client_sqlda ;
i++ ;
}
EXEC SQL CLOSE c1 ;
CHECKERR( "CLOSE CURSOR" ) ;
printf( "\n %d record(s) selected.\n\n", i ) ;
memset( ( void * ) procname, 0, 33 ) ;
strcpy( procname, "fillsrv" ) ;
EXEC SQL CALL :procname USING DESCRIPTOR :*server_sqlda ;
CHECKERR( "CALL INSERT WITH SQLDA" ) ;
printf( "Server Procedure Complete.\n" ) ;
printf( " %d record(s) added.\n\n", org_rows ) ;
EXEC SQL COMMIT ;
CHECKERR( "COMMIT INSERT" ) ;
EXEC SQL OPEN c1 ;
CHECKERR( "OPEN CURSOR" ) ;
EXEC SQL FETCH c1 USING DESCRIPTOR :*client_sqlda ;
CHECKERR( "OPEN CURSOR" ) ;
display_col_titles( client_sqlda ) ;
i = 0 ;
while ( SQLCODE == 0 ) {
display_da( client_sqlda ) ;
EXEC SQL FETCH c1 USING DESCRIPTOR :*client_sqlda ;
i++ ;
}
EXEC SQL CLOSE c1 ;
CHECKERR( "CLOSE CURSOR" ) ;
printf( "\n %d record(s) selected.\n\n", i ) ;
memset( ( void * ) server_sqlda->sqlvar[0].sqldata, 0, 15 ) ;
strcpy( ( char * ) server_sqlda->sqlvar[0].sqldata, "DELETE" ) ;
EXEC SQL CALL :procname USING DESCRIPTOR :*server_sqlda ;
CHECKERR( "CALL DELETE WITH SQLDA" ) ;
printf( "Server Procedure Complete.\n" ) ;
printf( "New record(s) deleted.\n\n" ) ;
EXEC SQL COMMIT ;
CHECKERR( "COMMIT DELETE" ) ;
EXEC SQL OPEN c1 ;
CHECKERR( "OPEN CURSOR" ) ;
EXEC SQL FETCH c1 USING DESCRIPTOR :*client_sqlda ;
CHECKERR( "OPEN CURSOR" ) ;
display_col_titles( client_sqlda ) ;
i = 0 ;
while ( SQLCODE == 0 ) {
display_da( client_sqlda ) ;
EXEC SQL FETCH c1 USING DESCRIPTOR :*client_sqlda ;
i++ ;
}
EXEC SQL CLOSE c1 ;
CHECKERR( "CLOSE CURSOR" ) ;
printf( "\n %d record(s) selected.\n\n", i ) ;
free_da( client_sqlda ) ;
free( server_sqlda ) ;
EXEC SQL CONNECT RESET ;
CHECKERR( "CONNECT RESET" ) ;
return( 0 ) ;
}