CからOCIを介してOracleデータベースにコールを行います。OCI_INVALID_HANDLE - 無効なサービス・コンテキスト、接続または文ハンドル
initOracle(..) { .. //return successful or 0 }
int executeGetQuery(char * query, char * queryResultData) {
char stmt[255];
OCIError *errhp;
OCIDefine *defnp = (OCIDefine *) 0;
OCIStmt *stmthp;
OCISvcCtx *svchp; //server context handle (almost like DBPROCESS)
sb2 is_null;
memset((char *)stmt, 0, 255);
//TODO replace with query
sprintf((char *)stmt, "SELECT min(ID) as MINID FROM BNS_SAA_CONFIRMATIONS where SentToWssStatus<>'T'");
/* prepare statement */
if(checkerr(errhp, OCIStmtPrepare(stmthp, errhp, (text *) stmt,
(ub4) strlen((char *) stmt),
(ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT)) == OCI_ERROR)
return -1;
/* define output params */
if(checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp, 1, (dvoid *) queryResultData,
(sword) strlen(queryResultData), SQLT_STR, (dvoid *) &is_null, (ub2 *)0,
(ub2 *)0, OCI_DEFAULT)) == OCI_ERROR)//maybe replace SQLT_STR w SQLT_CHR OMFWTD
return -1;
/* execute the statement */
status = OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0, (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT);
....
}
が、私はこれらの機能にエラー面を考える:私はこのコードを継承し
OCI_INVALID_HANDLE - Invalid service context, connection or statement handle
:
は、私はこのエラーを取得するOCIStmtExecute(..)
またはOCIDefineByPos(..)
またはOCIStmtPrepare(..)
質問: このエラーを解決する方法クエリの実行を開始しますか?
エラードキュメント:http://docs.oracle.com/cd/B28359_01/appdev.111/b28395/oci02bas.htm
あなたは長い道のりを歩んできました...あなたは関数のローカルな束を持っているようですが、どこにも配置されていないようです。まずは、ここでサーバーに接続するコードはありません。それは意味のある「OCISvcCtx」を得るために必要な作業です。OCIプログラミング・ドキュメンテーションのイントロを読んで、すべてのデモを利用することをお勧めしますオラクル社が提供するコードは、リンク先の付録Bにあります。 – Hoons
答えとしてあなたのコメントを受け入れる:)私には無意味な名前を持つローカル変数でした。回答として投稿してください。ありがとう! – Adrian