Invoca a un procedimiento almacenado definido con el adaptador de Consulta remota y Procedimiento almacenado para el DB2 Everyplace Sync Server. Por ejemplo, un procedimiento almacenado se ejecuta en la ubicación de la base de datos remota y devuelve los datos a la aplicación cliente de DB2 Everyplace.
Los programas que utilizan la sentencia de SQL CALL están diseñados para que se ejecuten en dos partes, una en el cliente y la otra en el servidor.
Invocación
Los procedimientos almacenados remotos se invocan desde una aplicación de DB2 Everyplace pasando la sintaxis de sentencia CALL siguiente a SQLPrepare(), seguida por SQLExecute().
Sintaxis
>>-CALL--nombre-procedimiento--+-------------+--+------+------->< | .-,-. | '-(--)-' | V | | '-(----?-+--)-'
Descripción
Reglas
Ninguna
Notas
La sentencia CALL utiliza el adaptador de consulta remota y procedimiento almacenado que se incluye con el DB2 Everyplace Sync Server. DB2 Everyplace Sync Server debe utilizar la sentencia CALL en aplicaciones de DB2 Everyplace. DB2 Everyplace no da soporte a procedimientos almacenados locales.
Para obtener información adicional, consulte la sección sobre fuentes de datos en el manual DB2 Everyplace Sync Server Administration Guide.
Ejemplo
Un ejemplo completo sobre cómo utilizar la sentencia CALL y el adaptador de consulta remota y procedimiento almacenado está disponible en el manual DB2 Everyplace Sync Server Administration Guide. El ejemplo siguiente sólo muestra el código de la sentencia CALL en una aplicación de ejemplo.
Se define un procedimiento almacenado MYPROC() en el servidor fuente para la base de datos mysample. Se define una suscripción AgentAdapter en el DB2 Everyplace Sync Server con los atributos siguientes:
ID de usuario: db2admin Contraseña: db2admin Otros: dbname=mysample;procname= db2e.MYPROC
Programa de ejemplo utilizando la sentencia CALL:
int main(int argc, char * argv[]) { SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; SQLRETURN rc; SQLCHAR strSQL[] = "CALL db2e.MYPROC(?,?,?,?,?)"; int nInd4, nInd5; int nSaving = 0, nChecking =0 ; int nCmd =0, nAmount=0; SQLCHAR strConnect[254]; //**************************************************************** //* Check input parameters //**************************************************************** if ( argc < 4 ){ printf("\nUsage : myClient AccountName Cmd Amount"); printf("\n cmd 1 : query balance"); printf("\n cmd 2 : Transfer from Saving to Checking"); printf("\n cmd 3 : Transfer from Checking to Saving"); return (99); } nCmd = atoi(argv[2]); nAmount = atoi(argv[3]); //**************************************************************** //* Allocate handles //**************************************************************** rc = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv; //checkerror rc = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc); //checkerror if (argc == 5){ strcpy(strConnect,"http://"); strcat(strConnect,argv[4]); strcat(strConnect,"/servlet/com.ibm.mobileservices.adapter.agent.AgentServlet?DB=mysample"); }else{ strcpy(strConnect, "http://127.0.0.1:8080/db2e/servlet/ com.ibm.mobileservices.adapter.agent.AgentServlet?DB=mysample"); } //**************************************************************** //* Connect to remote database //**************************************************************** rc = SQLConnect(hdbc, strConnect, SQL_NTS, "userex", SQL_NTS, "userex", SQL_NTS ); //checkerror rc = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt); //checkerror //**************************************************************** //* Prepare, Bind , and Execute the statement //**************************************************************** rc = SQLPrepare(hstmt,strSQL, SQL_NTS); //checkerror rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, (SQLPOINTER)argv[1], 0, NULL ); //checkerror rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&nCmd, sizeof(int), NULL); //checkerror rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&nAmount, sizeof(int), NULL ); //checkerror rc = SQLBindParameter(hstmt, 4, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&nSaving, sizeof(int), &nInd4 ); //checkerror rc = SQLBindParameter(hstmt, 5, SQL_PARAM_OUTPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, (SQLPOINTER)&nChecking, sizeof(int), &nInd5 ); //checkerror rc = SQLExecute(hstmt); //checkerror //**************************************************************** //* Print the balance //**************************************************************** printf("\nSaving = %d",nSaving); printf("\nChecking = %d",nChecking); SQLFreeHandle(SQL_HANDLE_STMT, hstmt); SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); return 0;
Consulta relacionada