OCL関数リファレンス

次の表に、OCLコネクタでサポートされる機能を示します。ヘッダーファイルはすべてユーザーが提供する必要があることに注意してください。AdvancedServerはそのようなファイルを提供しません。

接続、承認、初期化機能

関数

説明

OCIBreak

指定されたOCL関数を中止します。

OCIEnvCreate

OCL環境を作成します。

OCIEnvInit

OCL環境ハンドルを初期化します。

OCIInitialize

OCL環境を初期化します。

OCILogoff

セッションを解放します。

OCILogon

ログオン接続を作成します。

OCILogon2

さまざまなモードでログオンセッションを作成します。

OCIReset

現在の操作/プロトコルをリセットします。

OCIServerAttach

データソースへのアクセスパスを確立します。

OCIServerDetach

データソースへのアクセスを削除します。

OCISessionBegin

ユーザーセッションを作成します。

OCISessionEnd

ユーザーセッションを終了します。

OCISessionGet

セッションプールからセッションを取得します。

OCISessionRelease

セッションを解放します。

OCITerminate

共有メモリサブシステムから切り離します。

tnsnames.oraファイルの使用

OCIServerAttach メソッドは tnsnames.ora ファイルの dblink パラメータで指定された接続記述子を使用します。 tnsnames.ora ファイル(Oracleデータベースと互換性があります)を使用して、データベース接続アドレスを指定します。AdvancedServerは、ユーザーのホームディレクトリで tnsnames.ora という名前のファイルを検索します。AdvancedServerがユーザーのホームディレクトリで tnsnames.ora ファイルを見つけられない場合、 TNS_ADMIN で指定されたパスを検索します。

サンプルの tnsnames.ora ファイルには以下が含まれます:

 EDBX =
(DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 5444))
  (CONNECT_DATA = (SERVER = DEDICATED)(SID = edb))
)

ファイルに含まれていないパラメーターは、OpenClientLibraryによって無視されます。この例では、 SID は、ポート 5444 の localhost で実行されているクラスター内の edb という名前のデータベースを指します。

tnsnames.ora ファイルを使用する OCIServerAttach へのCプログラム呼び出しは次のようになります:

static text *username = (text *) "enterprisedb";
static text *password = (text *) "edb";
static text *attach_str = "EDBX";
OCIServerAttach(srvhp, errhp, attach_str, strlen(attach_str), 0);

tnsnames.ora ファイルがない場合は、接続文字列を //localhost:5444/edbx の形式で指定します。

注釈

tnsnames.ora では複数の記述子もサポートされています。

ハンドルおよび記述子関数

関数

説明

OCIAttrGet

ハンドル属性を取得します。拡張サーバーは、次のハンドル属性をサポートしています:OCI_ATTR_USERNAME、OCI_ATTR_PASSWORD、OCI_ATTR_SERVER、OCI_ATTR_ENV、OCI_ATTR_SESSION、OCI_ATTR_ROW_COUNT、OCI_ATTR_CHARSET_FORM、OCI_ATTR_CHARSET_ID、EDB_ATTR_MODT_ATTR_STMT_LEVEL

OCIAttrSet

ハンドル属性を設定します。高度なサーバーは、次のハンドル属性をサポートしています:OCI_ATTR_USERNAME、OCI_ATTR_PASSWORD、OCI_ATTR_SERVER、OCI_ATTR_ENV、OCI_ATTR_SESSION、OCI_ATTR_ROW_COUNT、OCI_ATTR_CHARSET_FORM、OCI_ATTR_CHARSET_ID、EDB_ATTR_MODR_ATTR_MODT_ATTR_MODT_ATTR_STMT_LEVEL

OCIDescriptorPlace

記述子を割り当てて初期化します。

OCIDescriptorFree

割り当てられた記述子を解放します。

OCIHandleAlloc

ハンドルを割り当てて初期化します。

OCIHandleFree

割り当てられたハンドルを解放します。

OCIParamGet

パラメータ記述子を取得します。

OCIParamSet

パラメータ記述子を設定します。

EDB_ATTR_EMPTY_STRINGS

By default, Advanced Server will treat an empty string as a NULL value. You can use the EDB_ATTR_EMPTY_STRINGS environment attribute to control the behavior of the OCL connector when mapping empty strings. To modify the mapping behavior, use the OCIAttrSet() function to set EDB_ATTR_EMPTY_STRINGS to one of the following:

値

説明

OCI_DEFAULT

空の文字列をNULL値として扱います。

EDB_EMPTY_STRINGS_NULL

空の文字列をNULL値として扱います。

EDB_EMPTY_STRINGS_EMPTY

空の文字列を長さ0の文字列として扱います。

EDB_ATTR_EMPTY_STRINGS の値を見つけるには、 OCIAttrGet() をクエリします。

EDB_ATTR_HOLDABLE

Advanced Server supports statements that execute as WITH HOLD cursors. The EDB_ATTR_HOLDABLE attribute specifies which statements execute as WITH HOLD cursors. The EDB_ATTR_HOLDABLE attribute can be set to any of the following three values:

  • EDB_WITH_HOLD - WITH HOLD カーソルとして実行

  • EDB_WITHOUT_HOLD -プロトコルレベルの準備済みステートメントを使用して実行します

  • OCI_DEFAULT -次の定義を参照

属性は OCIStmt ハンドルまたは OCIServer ハンドルに設定できます。 OCIServer ハンドルまたは OCIStmt ハンドルを作成すると、そのハンドルの EDB_ATTR_HOLDABLE 属性は OCI_DEFAULT に設定されます。

ハンドルの EDB_ATTR_HOLDABLE 属性を変更するには OCIAttrSet() を呼び出し、属性を取得するには OCIAttrGet() を呼び出します。

AdvancedServerが SELECT ステートメントを実行するとき、それは OCIServer ハンドルの EDB_ATTR_HOLDABLE 属性を調べます。その属性が EDB_WITH_HOLD に設定されている場合、クエリは WITH HOLD カーソルとして実行されます。

OCIServer ハンドルの EDB_ATTR_HOLDABLE 属性が EDB_WITHOUT_HOLD に設定されている場合、クエリは通常の準備済みステートメントとして実行されます。

OCIServer ハンドルの EDB_ATTR_HOLDABLE 属性が OCI_DEFAULT に設定されている場合、AdvancedServerは OCIServer ハンドルの EDB_ATTR_HOLDABLE 属性の値を使用します(` OCIServer の`0``属性が EDB_WITH_HOLD に設定されている場合、クエリは``8``カーソルとして実行されます。それ以外の場合、クエリはプロトコルで準備されたステートメントとして実行されます)。

EDB_HOLD_CURSOR_ACTION

EDB_HOLD_CURSOR_ACTION 属性はOCLインターフェースを使用して WITH HOLD カーソルが作成される方法を変更します。この属性は、次のいずれかの値に設定できます。

  • EDB_COMMIT_AFTER_CURSOR –カーソルの作成後にトランザクションをコミットします

  • EDB_CURSOR_WITHOUT_XACT_BLK –新しいトランザクションチェーンを開始しない

  • OCI_DEFAULT -次の定義を参照

次に属性値について説明します。

OCI_DEFAULT

ステートメントを実行するたびに、OCLはデータベースサーバーのトランザクション状態を調べます。トランザクションがまだ進行中でない場合、OCLはBEGINステートメントを実行して新しいトランザクションブロックを作成してから、指定したステートメントを実行します。トランザクションブロックは、 OCITransCommit() または OCITransRollback() を呼び出すまで開いたままです。

デフォルトでは、データベースサーバーは、コミットまたはロールバックすると、開いているカーソルをすべて閉じます。ユーザー(またはOCL)が WITH HOLD 句を含むカーソルを宣言すると、カーソルの結果セットはデータベースサーバーに保持され、そのカーソルから引き続きフェッチできます。ただし、トランザクションをロールバックすると、データベースサーバーは開いているカーソルを保持しません。 ROLLBACK の後にカーソルからフェッチしようとすると、データベースサーバーはエラーを報告します。

EDB_COMMIT_AFTER_CURSOR

アプリケーションがトランザクションをロールバックした後に WITH HOLD カーソルから読み取る必要がある場合は、作成前に EDB_HOLD_CURSOR_ACTION を EDB_COMMIT_AFTER_CURSOR に設定することで、OCLがカーソルを作成した直後にトランザクションをコミットするように調整できますそのようなカーソル。例えば:

ub4        action = EDB_COMMIT_AFTER_CURSOR;

OCIAttrSet(stmt, OCI_HTYPE_STMT, &action, sizeof(action),
  EDB_ATTR_HOLD_CURSOR_ACTION, err);

OCIStmtExecute( ... );

EDB_COMMIT_AFTER_CURSOR を使用すると、保留中の変更がコミットされることを理解することが重要です。

EDB_CURSOR_WITHOUT_XACT_BLK

EDB_COMMIT_AFTER_CURSOR によって追加された追加のコミットでアプリケーションが適切に実行されない場合は、 EDB_ATTR_HOLD_CURSOR_ACTION を EDB_CURSOR_WITHOUT_XACT_BLK に設定してみてください。このアクションでは、OCLは新しいトランザクションチェーンを開始しません。トランザクションをコミットまたはロールバックした直後に WITH HOLD カーソルを作成すると、カーソルは独自のトランザクション内に作成され、データベースサーバーはそのトランザクションをコミットし、カーソルは存続します。

カーソル宣言がトランザクション内の最初のステートメントでない場合でもエラーが発生する可能性があることを理解することが重要です。カーソルを宣言する前に他のステートメントを実行すると、 WITH HOLD カーソルがトランザクションブロックに作成され、エラーが発生した場合(またはアプリケーションが OCITransRollback() を呼び出した場合)はロールバックされることがあります。

Please note that you can set the EDB_HOLD_CURSOR_ACTION on the server level (OCIServer) or for each statement handle (OCIStmt). If the statement attribute is set to a value other than OCI_DEFAULT, the value is derived from the statement handle, otherwise (if the statement attribute is set to OCI_DEFAULT), the value is taken from the server handle. So you can define a server-wide default action by setting the attribute in the server handle, and leaving the attribute set to OCI_DEFAULT in the statement handles. You can use different values for each statement handle (or server handle) as you see fit.

EDB_ATTR_STMT_LVL_TX

特に指示がない限り、OCLコネクタは、サーバーがエラーを報告するたびに現在のトランザクションを ROLLBACK にします。選択した場合、自動 ROLLBACK を edb_stmt_level_tx パラメーターでオーバーライドできます。これにより、1つ(または複数)のステートメントがトランザクション内でエラーを発生させた場合でも、トランザクション内の変更が保持されます。

You can use the OCIServer attribute with OCIAttrSet() and OCIAttrGet() to enable or disable EDB_ATTR_STMT_LEVEL_TX. By default, edb_stmt_level_tx is disabled. To enable edb_stmt_level_tx, the client application must call OCIAttrSet():

OCIServer *server  = myServer;
ub1        enabled = 1;

OCIAttrSet(server, OCI_HTYPE_SERVER, &enabled,
  sizeof(enabled), EDB_ATTR_STMT_LEVEL_TX, err);

edb_stmt_level_tx を無効にするには:

OCIServer *server  = myServer;
ub1        enabled = 0;

OCIAttrSet(server, OCI_HTYPE_SERVER, &enabled,
  sizeof(enabled), EDB_ATTR_STMT_LEVEL_TX, err);

関数のバインド、定義、説明

関数

説明

OCIBindByName

名前でバインドします。

OCIBindByPos

位置によってバインドします。

OCIBindDynamic

バインド後に追加の属性を設定します。

OCIBindArrayOfStruct

一括操作のために構造体の配列をバインドします。

OCIDefineArrayOfStruct

配列の属性を指定します。

OCIDefineByPos

出力変数の関連付けを定義します。

OCIDefineDynamic

定義する追加の属性を設定します。

OCIDescribeAny

既存のスキーマオブジェクトについて説明します。

OCIStmtGetBindInfo

バインド変数とインジケータ変数の名前とハンドルを取得します。

OCIUserCallbackRegister

ユーザー定義のコールバックを定義します。

ステートメント関数

関数

説明

OCIStmtExecute

準備されたSQLステートメントを実行します。

OCIStmtFetch

データの行をフェッチします(非推奨)。

OCIStmtFetch2

データの行をフェッチします。

OCIStmtPrepare

SQLステートメントを準備します。

OCIStmtPrepare2

SQLステートメントを準備します。

OCIStmtRelease

ステートメントハンドルを解放します。

トランザクション関数

関数

説明

OCITransCommit

トランザクションをコミットします。

OCITransRollback

トランザクションをロールバックします。

XA関数

関数

説明

xaoEnv

OCL環境ハンドルを返します。

xaoSvcCtx

OCLサービスコンテキストを返します。

xaoSvcCtx

xaoSvcCtx関数を使用するには、次のように xaoSvcCtx または xa_open 接続文字列形式の拡張を提供する必要があります:

Oracle_XA{+<required_fields> ...}

ここで、 required_fields は次のとおりです:

HostName=host_ip_address はAdvancedServerデータベースのIPアドレスを指定します。

PortNumber=host_port_number はAdvancedServerが実行されているポート番号を指定します。

SqlNet=dbname はデータベース名を指定します。

Acc=P/username/password はデータベースのユーザー名とパスワードを指定します。*password*は省略できます。その場合、フィールドは Acc=P/username/ として指定されます。

AppName=app_id はアプリケーションを識別する番号を指定します。

接続文字列の例を次に示します。

Oracle_XA+HostName=192.168.1.1+PortNumber=1533+SqlNet=XE+Acc=P/user/password+AppName=1234

日付および日時関数

関数

説明

OCIDateAddDays

日数を加算または減算します。

OCIDateAddMonths

月数を加算または減算します。

OCIDateAssign

日付を割り当てます。

OCIDateCheck

指定された日付が有効かどうかを確認してください。

OCIDateCompare

2つの日付を比較します。

OCIDateDaysBetween

2つの日付間の日数を求めます。

OCIDateFromText

文字列を日付に変換します。

OCIDateGetDate

日付の日付部分を取得します。

OCIDateGetTime

日付の時刻部分を取得します。

OCIDateLastDay

月の最終日の日付を取得します。

OCIDateNextDay

翌日の日付を取得します。

OCIDateSetDate

日付の日付部分を設定します。

OCIDateSetTime

日付の時刻部分を設定します。

OCIDateSysDate

現在のシステムの日付と時刻を取得します。

OCIDateToText

日付を文字列に変換します。

OCIDateTimeAssign

日時の割り当てを実行します。

OCIDateTimeCheck

日付が有効かどうかを確認してください。

OCIDateTimeCompare

2つの日時値を比較します。

OCIDateTimeConstruct

日時記述子を作成します。

OCIDateTimeConvert

ある日時タイプを別の日時タイプに変換します。

OCIDateTimeFromArray

サイズOCI_DT_ARRAYLENの配列をOCIDateTime記述子に変換します。

OCIDateTimeFromText

指定された文字列を、指定された形式に従ってOCIDateTime記述子のOracle日時型に変換します。

OCIDateTimeGetDate

日時値の日付部分を取得します。

OCIDateTimeGetTime

日時値の時間部分を取得します。

OCIDateTimeGetTimeZoneName

日時値のタイムゾーン名の部分を取得します。

OCIDateTimeGetTimeZoneOffset

日時値のタイムゾーン(時間、分)部分を取得します。

OCIDateTimeSubtract

2つの日時値を入力として取り、それらの差を間隔として返します。

OCIDateTimeSysTimeStamp

システムの現在の日付と時刻をタイムゾーン付きのタイムスタンプとして取得します。

OCIDateTimeToArray

OCIDateTime記述子を配列に変換します。

OCIDateTimeToText

指定された日付を、指定された形式に従って文字列に変換します。

インターバル関数

関数

説明

OCIIntervalAdd

2つの間隔値を加算します。

OCIIntervalAssign

1つの間隔値を別の間隔値にコピーします。

OCIIntervalCompare

2つの間隔値を比較します。

OCIIntervalGetDaySecond

間隔から日、時間、分、秒、秒の端数を抽出します。

OCIIntervalSetDaySecond

間隔内の日、時間、分、秒、および端数秒を変更します。

OCIIntervalGetYearMonth

間隔から年と月の値を抽出します。

OCIIntervalSetYearMonth

間隔で年と月の値を変更します。

OCIIntervalDivide

OCINumber値によるOCIInterval値の除算を実装します。

OCIIntervalMultiply

OCINumber値によるOCIInterval値の乗算を実装します。

OCIインターバル減算

別の間隔値から1つの間隔値を減算します。

OCIIntervalToText

間隔から文字列を外挿します。

OCIIntervalCheck

間隔値の有効性を検証します。

OCIIntervalToNumber

OCIInterval値をOCINumber値に変換します。

OCIIntervalFromNumber

OCINumber値をOCIInterval値に変換します。

OCIDateTimeIntervalAdd

OCIDatetime値にOCIInterval値を追加して、OCIDatetime値を生成します。

OCIDateTimeIntervalSub

OCIDatetime値からOCIInterval値を減算し、OCIDatetime値を生成します。

OCIIntervalFromText

テキスト文字列を間隔に変換します。

OCIIntervalFromTZ

時間帯指定を間隔値に変換します。

数値関数

関数

説明

OCINumberAbs

絶対値を計算します。

OCINumberAdd

NUMBERを追加します。

OCINumberArcCos

逆余弦を計算します。

OCINumberArcSin

逆正弦を計算します。

OCINumberArcTan

逆正接を計算します。

OCINumberArcTan2

2つのNUMBERの逆正接を計算します。

OCINumberAssign

NUMBERを別のNUMBERに割り当てます。

OCINumberCeil

NUMBERの上限を計算します。

OCINumberCmp

NUMBERを比較します。

OCINumberCos

コサインを計算します。

OCINumberDec

NUMBERを減らします。

OCINumberDiv

2つのNUMBERを割ります。

OCINumberExp

eを指定されたNUMBER乗します。

OCINumberFloor

NUMBERのフロアを計算します。

OCINumberFromInt

整数をOracleNUMBERに変換します。

OCINumberFromReal

実数をOracleNUMBERに変換します。

OCINumberFromText

文字列をOracleNUMBERに変換します。

OCINumberHypCos

双曲線余弦を計算します。

OCINumberHypSin

双曲線正弦を計算します。

OCINumberHypTan

双曲線正接を計算します。

OCINumberInc

NUMBERを増分します。

OCINumberIntPower

与えられた底を整数乗します。

OCINumberIsInt

NUMBERが整数かどうかをテストします。

OCINumberIsZero

NUMBERがゼロかどうかをテストします。

OCINumberLn

自然対数を計算します。

OCINumberLog

任意の底を対数として計算します。

OCINumberMod

分割モジュール。

OCINumberMul

NUMBERを乗算します。

OCINumberNeg

NUMBERを無効にします。

OCINumberPower

基数への累乗e。

OCINumberPrec

NUMBERを指定した小数点以下の桁数に丸めます。

OCINumberRound

NUMBERを指定した小数点以下の桁数に丸めます。

OCINumberSetPi

NUMBERをPiに初期化します。

OCINumberSetZero

NUMBERをゼロに初期化します。

OCINumberShift

10を掛けて、指定した小数点以下の桁数をシフトします。

OCINumberSign

NUMBERの符号を取得します。

OCINumberSin

サインを計算します。

OCINumberSqrt

NUMBERの平方根を計算します。

OCINumberSub

NUMBERを減算します。

OCINumberTan

接線を計算します。

OCINumberToInt

NUMBERを整数に変換します。

OCINumberToReal

NUMBERを実数に変換します。

OCINumberToRealArray

NUMBERの配列を実際の配列に変換します。

OCINumberToText

NUMBERを文字列に変換します。

OCINumberTrunc

NUMBERを指定した小数点以下で切り捨てます。

文字列関数

関数

説明

OCIStringAllocSize

文字列メモリの割り当てサイズをバイト単位で取得します。

OCIStringAssign

文字列に文字列を割り当てます。

OCIStringAssignText

文字列にテキスト文字列を割り当てます。

OCIStringPtr

文字列ポインタを取得します。

OCIStringResize

文字列メモリのサイズを変更します。

OCIStringSize

文字列のサイズを取得します。

カートリッジサービスとファイルI/Oインターフェイス関数

関数

説明

OCIFileClose

開いているファイルを閉じます。

OCIFileExists

ファイルが存在するかどうかをテストして確認します。

OCIFileFlush

バッファリングされたデータをファイルに書き込みます。

OCIFileGetLength

ファイルの長さを取得します。

OCIFileInit

OCIFileパッケージを初期化します。

OCIFileOpen

ファイルを開きます。

OCIFileRead

ファイルからバッファに読み込みます。

OCIFileSeek

ファイル内の現在位置を変更します。

OCIFileTerm

OCIFileパッケージを終了します。

OCIFileWrite

ファイルにbuflenバイトを書き込みます。

LOB関数

関数

説明

OCILobRead

LOB値(またはLOB値の一部)を返します。

OCILOBWriteAppend

データをLOB値に追加します。

OCILobGetLength

LOB値の長さを返します。

OCILobTrim

LOB値の末尾からデータをトリミングします。

OCILobOpen

他のLOB関数で使用するためにLOB値を開きます。

OCILobClose

LOB値を閉じます。

その他の機能

関数

説明

OCIClientVersion

クライアントライブラリのバージョンを返します。

OCIErrorGet

エラーメッセージを返します。

OCIPGErrorGet

libpqまたはサーバーによって報告されたネイティブエラーメッセージを返します。署名は次のとおりです。

剣OCIPGErrorGet(dvoid/*hndlp、ub4recordno、OraText/*errcodep、ub4errbufsiz、OraText/*bufp、ub4bufsiz、ub4type)

OCIPasswordChange

パスワードを変更する。

OCIPing

接続とサーバーがアクティブであることを確認します。

OCIServerVersion

Oracleバージョン文字列を取得します。

サポートされているデータ型

関数

説明

ANSI_DATE

ANSI日付

SQLT_AFC

ANSI固定文字

SQLT_AVC

ANSI可変文字

SQLT_BDOUBLE

バイナリーダブル

SQLT_BIN

バイナリデータ

SQLT_BFLOAT

バイナリフロート

SQLT_CHR

文字列

SQLT_DAT

Oracleの日付

SQLT_DATE

ANSI日付

SQLT_FLT

浮く

SQLT_INT

整数

SQLT_LBI

ロングバイナリ

SQLT_LNG

長いです

SQLT_LVB

より長いバイナリ

SQLT_LVC

長いlong(文字)

SQLT_NUM

Oracle数値

SQLT_ODT

OCL日付タイプ

SQLT_STR

ゼロで終了する文字列

SQLT_TIMESTAMP

タイムスタンプ

SQLT_TIMESTAMP_TZ

タイムゾーン付きのタイムスタンプ

SQLT_TIMESTAMP_LTZ

ローカルタイムゾーンのタイムスタンプ

SQLT_UIN

符号なし整数

SQLT_VBI

VCS形式のバイナリ

SQLT_VCS

可変文字

SQLT_VNU

先行する長さバイトを持つ数

SQLT_VST

OCL文字列タイプ