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:

Categories: C言語, library, OCI, Oracle Database

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing