This example is a modified version of the example contained in the X/Open SQL CLI document. It shows the execution of interactive SQL statements, and follows the flow described in Chapter 2, Writing a DB2 CLI Application.
/* From CLI sample adhoc.c */ /* ... */ /******************************************************************* ** process_stmt ** - allocates a statement resources ** - executes the statement ** - determines the type of statement ** - if there are no result columns, therefore non-select statement ** - if rowcount > 0, assume statement was UPDATE, INSERT, DELETE ** else ** - assume a DDL, or Grant/Revoke statement ** else ** - must be a select statement. ** - display results ** - frees the statement resources *******************************************************************/ int process_stmt( SQLHANDLE hstmt, SQLCHAR * sqlstr ) { SQLSMALLINT nresultcols; SQLINTEGER rowcount; SQLRETURN rc; /* execute the SQL statement in "sqlstr" */ rc = SQLExecDirect(hstmt, sqlstr, SQL_NTS); if (rc != SQL_SUCCESS) if (rc == SQL_NO_DATA_FOUND) { printf("\nStatement executed without error, however,\n"); printf("no data was found or modified\n"); return (SQL_SUCCESS); } else CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ; rc = SQLNumResultCols(hstmt, &nresultcols); CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ; /* determine statement type */ if (nresultcols == 0) { /* statement is not a select statement */ rc = SQLRowCount(hstmt, &rowcount); if (rowcount > 0) /* assume statement is UPDATE, INSERT, DELETE */ printf("Statement executed, %ld rows affected\n", rowcount); else /* assume statement is GRANT, REVOKE or a DLL statement */ printf( "Statement completed successful\n" ) ; } else print_results( hstmt ) ; /* display the result set */ /* end determine statement type */ /* free statement resources */ rc = SQLFreeStmt( hstmt, SQL_UNBIND ) ; CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ; rc = SQLFreeStmt( hstmt, SQL_RESET_PARAMS ) ; CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ; rc = SQLFreeStmt( hstmt, SQL_CLOSE ) ; CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ; return( 0 ) ; } /* end process_stmt */ /* From the CLI sample utilcli.c */ /* ... */ sqlrc = SQLDescribeCol( hstmt, ( SQLSMALLINT ) ( i + 1 ), colName, sizeof(colName), &colNameLen, &colType, &colSize, &colScale, NULL ) ;