Archive for 3月 30th, 2012
-
Hello, OCI World!
Posted on 3月 30th, 2012 by cx20
OCI
OCI(Oracle Call Interface)は Oracle Database 用の C API である。
OCI 7.x とそれ以降では、関数セットが大きく異なっており、現在は、新しい関数セットを用いることが推奨されている。旧(7.x) 新(7.x以降) 説明 opinit() OCIEnvCreate() 環境の作成 olon() OCILogon() ログイン ologof() OCILogoff() ログオフ oparse() OCIStmtPrepare() SQL文の準備 odefin() OCIDefineByPos() 項目と変数の関連付け oexec() OCIStmtExecute() SQL実行 ofetch() OCIStmtFetch2() 結果セットより行を取得 ocom() OCITransCommit() コミット orol() OCITransRollback() ロールバック なお、Windows に標準で導入されている Oracle 用のデータベースドライバとして以下のものがあるが、これらは、Oracle クライアントのバージョンとは無関係にOCI 7 API を呼び出す仕様の為、新しい機能を使う場合は、Oracle 社より提供されているドライバを使用する必要がある。
ファイル 種類 説明 MSORCL32.DLL ODBC ドライバ Microsoft ODBC for Oracle MSDAORA.DLL OLE DB プロバイダ Microsoft OLE DB Provider for Oracle ソースコード
#include <stdio.h> #include <string.h> #include <oci.h> int main( int argc, char* argv[] ) { sword status = OCI_SUCCESS; OCIEnv* envhp; OCIError* errhp; OCISvcCtx* svchp; OCIStmt* stmtp; OCIBind* bindp; OCIDefine* dfnp; char* username = "scott"; char* password = "tiger"; char* dbname = "orcl"; char* stmt = "SELECT 'Hello, OCI World!' AS Message FROM DUAL"; char message[64]; OCIEnvCreate(&envhp, OCI_DEFAULT, 0, 0, 0, 0, 0, 0); OCIHandleAlloc(envhp, &errhp, OCI_HTYPE_ERROR, 0, 0); OCILogon(envhp, errhp, &svchp, username, strlen(username), password, strlen(password), dbname, strlen(dbname)); OCIHandleAlloc(envhp, &stmtp, OCI_HTYPE_STMT, 0, 0); OCIStmtPrepare(stmtp, errhp, stmt, strlen(stmt), OCI_NTV_SYNTAX, OCI_DEFAULT); OCIDefineByPos(stmtp, &dfnp, errhp, 1, message, sizeof(message), SQLT_STR, 0, 0, 0, OCI_DEFAULT); OCIStmtExecute(svchp, stmtp, errhp, 1, 0, NULL, NULL, OCI_DEFAULT); while ( status == OCI_SUCCESS ) { printf("%sn", message); status = OCIStmtFetch2(stmtp, errhp, 1, OCI_FETCH_NEXT, 0, OCI_DEFAULT); } OCIHandleFree(stmtp, OCI_HTYPE_STMT); OCILogoff(svchp, errhp); OCIHandleFree(errhp, OCI_HTYPE_ERROR); return 0; }
コンパイル&リンク方法(Visua C++)
C:¥> SET INCLUDE=ORACLE_BASEORACLE_HOMEociinclude;%INCLUDE% C:¥> SET LIB=ORACLE_BASEORACLE_HOMEocilibmsvc;%LIB% C:¥> cl hello.c /link oci.lib
実行結果
Hello, OCI World!