0
私は別のサーバにあるOracleストアドプロシージャを呼び出しています。そのため、ネットワークに問題がある場合、アプリケーションはOCI_Execute(文)に「スタックします」。C - ストアドプロシージャコール(ocilib)のタイムアウトを設定する
このSP実行にタイムアウトを設定する必要がありますか、または接続状態を確認する必要がありますが、私はいつものアプローチがわかりません。どのように、ネットワークに障害が発生したときに、プログラムが立ち往生することができます - OCI_Execute(stmt);
- 私はそれが機能execStoredProc
の1行目にあります、言ったように
#include <stdio.h>
#include <ocilib.h>
OCI_Connection *dbConn;
OCI_Statement *storedProcStmt;
otext *storedProcQuery = "BEGIN TEST_PROC (:param1,:param2,:result); END;";
int main()
{
if(connectDB() != 0){
return (1);
}
storedProcStmt = OCI_StatementCreate(dbConn);
OCI_Prepare(storedProcStmt, storedProcQuery);
char paramResult[3] = "";
OCI_BindString(storedProcStmt, ":param1", "123", strlen("123"));
OCI_BindString(storedProcStmt, ":param2", "abc", strlen("abc"));
OCI_BindString(storedProcStmt, ":result", paramResult, 2);
execStoredProc(storedProcStmt);
printf("RESULT:\n");
printf("%s\n", paramResult);
return (0);
}
int connectDB()
{
if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
return (EXIT_FAILURE);
dbConn = OCI_ConnectionCreate("xe", "user", "password", OCI_SESSION_DEFAULT);
if (dbConn == NULL)
{
printf("Could not connect to DB\n");
return (1);
}
printf("Connected to DB\n");
return (0);
}
int execStoredProc(OCI_Statement *stmt)
{
OCI_Execute(stmt);
OCI_Commit(dbConn);
OCI_StatementFree(stmt);
}
を:ここで
は私がやっているものの一例ですこの関数を実行するには、例えば5秒という制限を設定します。私は何を検索するか、またはコード例のヒントが必要です、ありがとう!