/******************************************************************************
**
** Source File Name = clicall.c
**
** 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 :
** - Defines a function that is called from the embedded SQL sample
** program mrspcli3.sqc. This function calls mrspsrv2.sqc on the server
** which returns a result set.
**
** For more information about these samples see the README file.
**
** For more information on programming in CLI see the:
** - "Building CLI Applications" section of the Application Building Guide, and the
** - CLI Guide and Reference.
**
** For more information on the SQL language see the SQL Reference.
**
******************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "sqlcli1.h"
#include "samputil.h" /* Header file for common CLI sample code */
#define MAX_STMT_LEN 255
int
callcli( char *procname,
SQLDOUBLE *sal,
SQLSMALLINT *salind )
{
SQLHENV henv;
SQLHDBC hdbc;
SQLRETURN rc;
SQLHSTMT hstmt;
SQLCHAR stmt[MAX_STMT_LEN] = "";
SQLINTEGER pcbValue;
rc = SQLAllocEnv(&henv);
if (rc == SQL_ERROR)
return (terminate(henv, rc));
rc = SQLAllocConnect(henv, &hdbc);
if (rc == SQL_ERROR)
return (terminate(henv, rc));
rc = SQLConnect(hdbc, NULL, SQL_NTS, NULL, SQL_NTS, NULL, SQL_NTS);
if (rc == SQL_ERROR)
return (terminate(henv, rc));
rc = SQLAllocStmt(hdbc, &hstmt);
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc ) ;
pcbValue = SQL_NULL_DATA; /* Sal has no input, so set to null */
/* Build the Call Statement */
strcpy((char *)stmt, "CALL ");
strcat((char *)stmt, procname);
strcat((char *)stmt, "( ? )");
/* Prepare the call statement */
rc = SQLPrepare(hstmt, stmt, SQL_NTS);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
/* Bind the parameter to application variables (sal and salind) */
rc = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_DOUBLE, SQL_DOUBLE,
0, 0, sal, 0, &pcbValue);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
*salind = (SQLSMALLINT) pcbValue;
SQLExecute(hstmt);
/* Ignore Warnings */
if (rc != SQL_SUCCESS & rc != SQL_SUCCESS_WITH_INFO)
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
printf("Server Procedure Complete.\n");
/* Print Salary Returned in the bound application variables */
if (pcbValue == SQL_NULL_DATA) /* Check for null value */
printf("Median Salary = NULL\n");
else
printf("Median Salary = %.2f\n\n", *sal );
/* Assume only 1 result set */
rc = print_results(hstmt);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLFreeStmt(hstmt, SQL_DROP);
CHECK_HANDLE( SQL_HANDLE_STMT, hstmt, rc ) ;
rc = SQLTransact(henv, hdbc, SQL_COMMIT);
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc ) ;
printf("Disconnecting .....\n");
rc = SQLDisconnect(hdbc);
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc ) ;
rc = SQLFreeConnect(hdbc);
CHECK_HANDLE( SQL_HANDLE_DBC, hdbc, rc ) ;
rc = SQLFreeEnv(henv);
if (rc != SQL_SUCCESS)
terminate(henv, rc);
return (SQL_SUCCESS);
}; /* end main */