DSN8ED7

Calls Db2-provided stored procedure ADMIN_INFO_SYSPARM, which returns the current settings of the Db2 subsystem parameters.

 /*********************************************************************
 * Module name = DSN8ED7 (DB2 sample program)                         *
 *                                                                    *
 * DESCRIPTIVE NAME = Caller for SYSPROC.ADMIN_INFO_SYSPARM           *
 *                    (IFCID 106 formatter stored procedure)          *
 *                                                                    *
 *     Licensed Materials - Property of IBM                           *
 *     5635-DB2                                                       *
 *     (C) COPYRIGHT 1982, 2006 IBM Corp.  All Rights Reserved.       *
 *                                                                    *
 *     STATUS = Version 11                                            *
 *                                                                    *
 * Function: Calls DB2-provided stored procedure ADMIN_INFO_SYSPARM,  *
 *           which returns the current settings of the DB2 subsystem  *
 *           parameters.  These settings are then written in          *
 *           report format to standard output.                        *
 *                                                                    *
 * Notes:                                                             *
 *   Dependencies: Requires IBM C/C++ for z/OS                        *
 *                                                                    *
 *   Restrictions:                                                    *
 *                                                                    *
 * Module type: C program                                             *
 *   Processor: IBM C/C++ for z/OS                                    *
 * Module size: See linkedit output                                   *
 *  Attributes: Re-entrant and re-usable                              *
 *                                                                    *
 * Entry Point: DSN8ED7                                               *
 *     Purpose: See Function                                          *
 *     Linkage: Standard z/OS linkage                                 *
 *                                                                    *
 *                                                                    *
 *  Parameters: none                                                  *
 *                                                                    *
 * Normal Exit: Return Code: 0000                                     *
 *              - Message: report of DB2 subsystem parameter settings *
 *                                                                    *
 *  Error Exit: Return Code: 0012                                     *
 *              - Message: <formatted SQL text from DSNTIAR>          *
 *                                                                    *
 *                                                                    *
 *    External References:                                            *
 *             - Routines/Services: DSNTIAR: DB2 msg text formatter   *
 *             - Data areas       : None                              *
 *             - Control blocks   : None                              *
 *                                                                    *
 *  Pseudocode:                                                       *
 *   DSN8ED7:                                                         *
 *   - Call ADMIN_INFO_SYSPARM                                        *
 *     - if unsuccessful, call sql_error to issue a diagnostic mes-   *
 *       sage, then end with code 0012.                               *
 *   - Associate a locator variable with the result set               *
 *   - Allocate the result set cursor                                 *
 *   - Fetch first row from the result set                            *
 *   - Print headings                                                 *
 *   - Output the content of the result set's current row and fetch   *
 *     the next row, until are rows have been fetched                 *
 *   - Check for successful processing of result set                  *
 *   End DSN8ED7                                                      *
 *                                                                    *
 *   sql_error:                                                       *
 *   - call DSNTIAR to format the unexpected SQLCODE.                 *
 *   End sql_error                                                    *
 *                                                                    *
 *  Change activity =                                                 *
 *    11/07/2012 Convert from SYSPROC.DSNWZP    dn1651_inst1 / dn1651 *
 *               to SYSPROC.ADMIN_INFO_SYSPARM                        *
 *                                                                    *
 *********************************************************************/
 /**************************** Equates *******************************/
 #define         NOT_OK         0      /* Run status indicator: Error*/
 #define         OK             1      /* Run status indicator: Good */

 #define         OUTLEN        80      /* Length of DSNTIAR line     */
 #define         DATA_DIM      10      /* Number of DSNTIAR lines    */

 /**************************** Includes ******************************/
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

 /******************* DB2 SQL Communication Area *********************/
 EXEC SQL INCLUDE SQLCA;

 /************************ DB2 Host Variables ************************/
 EXEC SQL BEGIN DECLARE SECTION;

   /******** Host variables for ADMIN_INFO_SYSPARM parameters ********/
   char          hvDB2_MEMBER[9];      /* host var, target DB2       */
   short int     niDB2_MEMBER    = -1; /* indic var for above parm   */

   long int      hvRETURN_CODE   = 0;  /* host var, return code      */
   short int     niRETURN_CODE   = 0;  /* indic var for above parm   */

   char          hvMSG[1332];          /* host var, status message   */
   short int     niMSG           = 0;  /* indic var for above parm   */

   /****** Result set locator for ADMIN_INFO_SYSPARM result set ******/
   static volatile SQL TYPE IS RESULT_SET_LOCATOR *DB2_SYSPARM_rs_loc;

   /******** Host variables for ADMIN_INFO_SYSPARM result set ********/
   long int      hvROWNUM        = 0;  /* host var, row number       */

   char          hvMACRO[9];           /* host var, zparm macro name */

   char          hvPARAMETER[41];      /* host var, zparm name       */

   char          hvINSTALL_PANEL[9];   /* host var, inst panel name  */
   short int     niINSTALL_PANEL = 0;  /* indic var for above parm   */

   char          hvINSTALL_FIELD[41];  /* host var, inst field name  */
   short int     niINSTALL_FIELD = 0;  /* indic var for above parm   */

   char          hvINSTALL_LOCATION[13];/*host var, inst field numb  */
   short int     niINSTALL_LOCATION = 0;/*indic var for above parm   */

   char          hvVALUE[2049];        /* host var, zparm setting    */

   char          hvADDITIONAL_INFO[201];/*host var, zparm setting    */
   short int     niADDITIONAL_INFO = 0; /*indic var for above parm   */

 EXEC SQL END DECLARE SECTION;

 /********************** DB2 Message Formatter ***********************/
 struct          error_struct          /* DSNTIAR message structure  */
   { short int   error_len;
     char        error_text[DATA_DIM][OUTLEN];
   }             error_message = {DATA_DIM * (OUTLEN)};

 #pragma         linkage( dsntiar, OS )

 extern short int dsntiar( struct      sqlca         *sqlca,
                           struct      error_struct  *msg,
                           int                       *len );

 /********************* DSN8ED7 Global Variables *********************/
 short int       status = OK;          /* DSN8ED7 run status         */

 /******************** DSN8ED7 Function Prototypes *******************/
 int main( int argc, char *argv[] );
 void sql_error( char locmsg[] );      /* Calls SQL text formatter   */

 /*********************************************************************
 * Get DB2's current subsystem and DSNHDECP parameter settings
 *********************************************************************/
 int main( int argc, char *argv[] )
   {
     char          msgBuf[1400];       /* message buffer             */

     /*****************************************************************
     * Call SYSPROC.ADMIN_INFO_SYSPARM
     *****************************************************************/
     EXEC SQL
       CALL SYSPROC.ADMIN_INFO_SYSPARM
              ( :hvDB2_MEMBER  :niDB2_MEMBER
              , :hvRETURN_CODE :niRETURN_CODE
              , :hvMSG         :niMSG
              );

     if( SQLCODE != 466 )
       { sprintf( msgBuf
                , "DSN8ED7: Error calling stored procedure "
                           "ADMIN_INFO_SYSPARM: \n"
                  "          Return code=%i,\n"
                  "          Message=%s"
                , hvRETURN_CODE
                , hvMSG
                );
         sql_error( msgBuf );
       }

     /*****************************************************************
     * Associate a locator variable with the result set
     *****************************************************************/
     if( status == OK )
       {
         EXEC SQL ASSOCIATE LOCATOR
           (:DB2_SYSPARM_rs_loc)
           WITH PROCEDURE SYSPROC.ADMIN_INFO_SYSPARM;

         if (SQLCODE != 0 )
           { sql_error( "*** Associate result set locator "
                            "call unsuccessful." );
           }
       }

     /*****************************************************************
     * Allocate the result set cursor
     *****************************************************************/
     if( status == OK )
       {
         EXEC SQL ALLOCATE DB2_SYSPARM_RS_CSR
           CURSOR FOR
           RESULT SET :DB2_SYSPARM_rs_loc;

         if (SQLCODE != 0 )
           { sql_error( "*** Allocate result set cursor "
                            "call unsuccessful." );
           }
       }

     /*****************************************************************
     * Fetch first row from the result set
     *****************************************************************/
     if( status == OK )
       {
         EXEC SQL FETCH DB2_SYSPARM_RS_CSR
           INTO :hvROWNUM
              , :hvMACRO
              , :hvPARAMETER
              , :hvINSTALL_PANEL    :niINSTALL_PANEL
              , :hvINSTALL_FIELD    :niINSTALL_FIELD
              , :hvINSTALL_LOCATION :niINSTALL_LOCATION
              , :hvVALUE
              , :hvADDITIONAL_INFO
              ;

         if (SQLCODE != 0 )
           { sql_error( "*** Priming fetch of result "
                            "set cursor unsuccessful" );
           }
       }

     /*****************************************************************
     * Write the report header
     *****************************************************************/
     if( status == OK )
       {
         printf( "DSN8ED7: Sample DB2 for z/OS "
                 "Configuration Setting Report Generator\n \n" );

         printf( "Macro    Parameter                 "
                 "Current                                 "
                 "Description/                            "
                 "Install  Fld \n" );
         printf( "Name     Name                      "
                 "Setting                                 "
                 "Install Field Name                      "
                 "Panel ID No. \n" );
         printf( "-------- ------------------------- "
                 "--------------------------------------- "
                 "--------------------------------------- "
                 "-------- ----\n" );
       }

     /*****************************************************************
     * Output the contents of the result set
     *****************************************************************/
     while( SQLCODE == 0 && status == OK )
       {
         if( strcmp( hvMACRO,"DSN6SYSP" ) == 0
          || strcmp( hvMACRO,"DSN6LOGP" ) == 0
          || strcmp( hvMACRO,"DSN6ARVP" ) == 0
          || strcmp( hvMACRO,"DSN6SPRM" ) == 0
          || strcmp( hvMACRO,"DSN6FAC"  ) == 0
          || strcmp( hvMACRO,"DSN6GRP"  ) == 0
          || strcmp( hvMACRO,"DSNHDECP" ) == 0
           )
           printf( "%-9.8s"
                   "%-26.25s"
                   "%-40.39s"
                   "%-40.39s"
                   "%-9.8s"
                   "%4.4s\n"
                 , hvMACRO
                 , hvPARAMETER
                 , hvVALUE
                 , hvINSTALL_FIELD
                 , hvINSTALL_PANEL
                 , hvINSTALL_LOCATION
                 );

         EXEC SQL FETCH DB2_SYSPARM_RS_CSR
           INTO :hvROWNUM
              , :hvMACRO
              , :hvPARAMETER
              , :hvINSTALL_PANEL    :niINSTALL_PANEL
              , :hvINSTALL_FIELD    :niINSTALL_FIELD
              , :hvINSTALL_LOCATION :niINSTALL_LOCATION
              , :hvVALUE
              , :hvADDITIONAL_INFO
              ;
       }

     /*****************************************************************
     * Check for successful processing of result set
     *****************************************************************/
     if (SQLCODE != 100 && status == OK )
       { sql_error( "*** Fetch of result set cursor "
                        "unsuccessful." );

       }

     if( status == OK )
       return( 0 );
     else
       return( 12 );
   } /* end: main */

 void sql_error( char locmsg[] )       /* SQL message formatter      */
   { short int   rc;                   /* DSNTIAR Return code        */
     int         j,k;                  /* Loop control               */
     static int  lrecl = OUTLEN;       /* Width of message lines     */

     /*****************************************************************
     * Set status to prevent further processing
     *****************************************************************/
     status = NOT_OK;

     /*****************************************************************
     * Print the locator message
     *****************************************************************/
     printf( " %s\n", locmsg );

     /*****************************************************************
     * Format and print the SQL message
     *****************************************************************/
     rc = dsntiar( &sqlca, &error_message, &lrecl );
     if( rc == 0 )
       for( j=0; j<DATA_DIM; j++ )
         { for( k=0; k<OUTLEN; k++ )
             putchar(error_message.error_text[j][k] );
           putchar('\n');
         }
     else
       { printf( " *** ERROR: DSNTIAR could not format the message\n" );
         printf( " ***        SQLCODE is %d\n",SQLCODE );
         printf( " ***        SQLERRM is \n" );
         for( j=0; j<sqlca.sqlerrml; j++ )
           printf( "%c", sqlca.sqlerrmc[j] );
         printf( "\n" );
       }

   } /* end of sql_error */