/* * LICENSE AND DISCLAIMER * ---------------------- * THIS MATERIAL CONTAINS IBM COPYRIGHTED SAMPLE PROGRAMMING SOURCE * CODE ('SAMPLE CODE'). * IBM GRANTS YOU A NONEXCLUSIVE LICENSE TO COMPILE, LINK, EXECUTE, * DISPLAY, REPRODUCE, DISTRIBUTE AND PREPARE DERIVATIVE WORKS OF * THIS SAMPLE CODE. THE SAMPLE CODE HAS NOT BEEN THOROUGHLY * TESTED UNDER ALL CONDITIONS. IBM, THEREFORE, DOES NOT GUARANTEE * OR IMPLY ITS RELIABILITY, SERVICEABILITY, OR FUNCTION. IBM * PROVIDES NO PROGRAM SERVICES FOR THE SAMPLE CODE. * * ALL SAMPLE CODE CONTAINED HEREIN IS PROVIDED TO YOU "AS IS" WITHOUT * ANY WARRANTIES OF ANY KIND. THE IMPLIED WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGMENT ARE EXPRESSLY * DISCLAIMED. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED * WARRANTIES, SO THE ABOVE EXCLUSIONS MAY NOT APPLY TO YOU. IN NO * EVENT WILL IBM BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, * SPECIAL OR OTHER CONSEQUENTIAL DAMAGES FOR ANY USE OF THE SAMPLE CODE * INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, BUSINESS * INTERRUPTION, LOSS OF PROGRAMS OR OTHER DATA ON YOUR INFORMATION * HANDLING SYSTEM OR OTHERWISE, EVEN IF WE ARE EXPRESSLY ADVISED OF * THE POSSIBILITY OF SUCH DAMAGES. * * (C) COPYRIGHT IBM CORP. 2006 * ALL RIGHTS RESERVED. * US GOVERNMENT USERS RESTRICTED RIGHTS - * USE, DUPLICATION OR DISCLOSURE RESTRICTED * BY GSA ADP SCHEDULE CONTRACT WITH IBM CORP. * LICENSED MATERIAL - PROPERTY OF IBM */ /***************************************************************************/ /* COMPILE STATEMENT */ /* CRTSQLCI OBJ(LIB/CRTREPORT) SRCFILE(LIB/CRTREPORT) */ /* COMMIT(*NONE) OBJTYPE(*PGM) OUTPUT(*PRINT) */ /***************************************************************************/ /***************************************************************************/ /* */ /* Program name: CRTREPORT */ /* Author: Tyler Kaye */ /* Function: Generate Reports interactivly or through Batch */ /* */ /* Parameters: argv[1] - char [10] - Library Name */ /* argv[2] - char [30] - tableName of Selected */ /* argv[3] - char [30] - tableName to Store Data */ /* argv[4] - char [30] - tableName to Store Status */ /* argv[5] - int - interactive(0)/batch(1) */ /* argv[6] - int - Number of Samples */ /* argv[7] - int/char - Seconds or Start Time */ /* argv[8] - int - Stop Time (Req if Batch) */ /***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include /***************************************************************************/ /* Function prototypes */ /***************************************************************************/ /***************************************************************************/ /* Global variables */ /***************************************************************************/ /*parameters for QCMDEXEC */ int length; char pgm[400]; decimal(15,5) packed_length; /***************************************************************************/ /* SQL Error Handling and SQL Descriptor areas in C and C++ */ /***************************************************************************/ EXEC sql include SQLCA; EXEC sql include SQLDA; /***************************************************************************/ /* M A I N F U N C T I O N */ /***************************************************************************/ int main(int argc, char *argv[]) { char library[10]; char selected[30]; char newReport[30]; char reportStatus[30]; int reportType = -1; int numSamples = -1; int seconds = -1; char startTime[15]; char endTime[15]; /***************************************************************************/ /* SQL Variable Declaration */ /***************************************************************************/ EXEC SQL BEGIN DECLARE SECTION; char stmt[1024]; char get[1024]; char RTVTABLE[7]; char PSEUDO[7]; char schema[30]; char table[30]; long deletes = -1; long updates = -1; long inserts = -1; long long dataIPL = -1; long long rowSize = -1; EXEC SQL END DECLARE SECTION; char tableNames[10000][30]; char schemaNames[10000][30]; int counter = 0; int x = 0; int iteration = 0; /***************************************************************************/ /* Check if Valid Number of Arguments */ /***************************************************************************/ if(argc != 8 && argc !=9) { printf("\n\n\n\n\n\n\n\n\n\n\nImproper Number of Paramaters\n"); return; } /***************************************************************************/ /* Retrieve and store Command Line Arguments */ /***************************************************************************/ sprintf(library,"%s",argv[1]); sprintf(selected,"%s",argv[2]); sprintf(newReport,"%s",argv[3]); sprintf(reportStatus,"%s",argv[4]); reportType = atoi(argv[5]); printf("Report Type %d\n",reportType); numSamples = atoi(argv[6]); printf("Number of Samples %d\n",numSamples); if(argc == 8) { seconds = atoi(argv[7]); printf("Seconds %d\n",seconds); } else if(argc == 9) { sprintf(startTime,"%s",argv[7]); sprintf(endTime,"%s",argv[8]); } else { printf("Error\n"); return; } sprintf(get,"select RTRIM(schemaName), RTRIM(tableName) from %s/%s", library,selected); sprintf(get,"%s where selected = 1",get); EXEC SQL PREPARE RTVTABLE FROM :get; EXEC SQL DECLARE CURSOR CURSOR FOR RTVTABLE; EXEC SQL OPEN CURSOR USING :RTVTABLE; EXEC SQL WHENEVER NOT FOUND GOTO close_cursor; /***************************************************************************/ /* Interactive Report */ /***************************************************************************/ if(reportType == 0) { printf("Interactive Report\n"); /*************************************************************************/ /* Create Report table */ /*************************************************************************/ sprintf(stmt,"CREATE TABLE %s/%s ",library,newReport); sprintf(stmt,"%s (SampleNum int, Schema char(30), TableName char(30),", stmt); sprintf(stmt,"%s DataSinceIPL BIGINT,RowSize BIGINT,PT int,UP int,DL int,", stmt); sprintf(stmt,"%s Time timestamp)",stmt); EXEC SQL EXECUTE IMMEDIATE :stmt; if(sqlca.sqlcode < 0) { printf("SQL ERROR %d\n",sqlca.sqlcode); return; } /*************************************************************************/ /* Create Remove Before table */ /*************************************************************************/ sprintf(stmt,"CREATE TABLE %s/rmBefore%s ",library,newReport); sprintf(stmt,"%s (SampleNum int, Schema char(30), TableName char(30),", stmt); sprintf(stmt,"%s DataSinceIPL BIGINT,RowSize BIGINT,PT int,UP int,DL int,", stmt); sprintf(stmt,"%s Time timestamp)",stmt); EXEC SQL EXECUTE IMMEDIATE :stmt; if(sqlca.sqlcode < 0) { printf("SQL ERROR %d\n",sqlca.sqlcode); return; } /*************************************************************************/ /* Update Status to Active */ /*************************************************************************/ sprintf(stmt,"UPDATE %s/%s SET STATUS = 1",library,reportStatus); sprintf(stmt,"%s WHERE REPORTNAME = '%s'",stmt,newReport); EXEC SQL EXECUTE IMMEDIATE :stmt; while(1) { EXEC SQL FETCH CURSOR INTO :schema, :table; sprintf(tableNames[counter],"%s",table); sprintf(schemaNames[counter],"%s",schema); counter++; } close_cursor: EXEC SQL CLOSE CURSOR; EXEC SQL WHENEVER NOT FOUND CONTINUE; printf("Number of Samples %d\n",numSamples); printf("iteration %d\n",iteration); while(iteration <= numSamples){ iteration++; x = 0; for(x; xtm_hour); printf ( "Year is %i\n",timeinfo->tm_year); }