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! |
Tags: OCI
Categories: C言語, library, OCI, Oracle Database