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文字列タイプ |