文字列の操作用に、2種類のデータ構造がサポートされています。
マルチバイト文字列
ワイドキャラクタ文字列
マルチバイト文字列は、システム固有のOracleキャラクタ・セットでエンコードされています。マルチバイト文字列で動作する関数は、バイト単位で計算された文字列の長さを使用して、文字列全体を1つの単位として使用します。ワイドキャラクタ(wchar
)文字列関数を使用すると、より柔軟に文字列を操作できます。文字に基づいた操作および文字列に基づいた操作をサポートし、長さは文字列の長さを文字で計算した数値です。
ワイドキャラクタ・データ型はOracle固有のもので、ANSI/ISO C標準で定義されているwchar_t
データ型と混同しないでください。Oracleのワイドキャラクタ・データ型はすべてのオペレーティング・システムで常に4バイトですが、wchar_t
のサイズは実装およびオペレーティング・システムによって異なります。Oracleワイドキャラクタ・データ型は、マルチバイト文字を正規化するため、統一された固定幅になり、処理が簡単になります。これにより、Oracleのワイドキャラクタ・セットとシステム固有のキャラクタ・セット間でのラウンドトリップ変換の際、データが失われません。
文字列操作は、次のカテゴリに分類できます。
マルチバイト・キャラクタとワイド・キャラクタ間の文字列変換
文字の分類
大/小文字の変換
表示長の計算
比較、連結、検索などの一般的な文字列操作
表22-4は、この項で説明しているOCI文字列操作関数のサマリーを示しています。
表22-4 OCI文字列操作関数
関数 | 用途 |
---|---|
「OCIMultiByteInSizeToWideChar()」 |
マルチバイト文字列の一部をワイドキャラクタ文字列に変換します。 |
「OCIMultiByteStrCaseConversion()」 |
マルチバイト文字列を指定された大/小文字に変換し、結果を宛先配列にコピーします。 |
|
マルチバイト文字列を宛先文字列に追加します。 |
|
2つのマルチバイト文字列を、バイナリ、言語または大/小文字を区別しない比較メソッドを使用して比較します。 |
|
マルチバイト文字列を宛先配列にコピーします。これは、コピーされたバイト数を戻します。 |
|
マルチバイト文字列のバイト数を戻します。 |
|
マルチバイト文字列を宛先文字列にnバイト以内で追加します。 |
|
2つのマルチバイト文字列を、バイナリ、言語または大/小文字を区別しない比較メソッドを使用して比較します。各文字列は指定された長さの範囲内です。 |
|
指定されたバイト数のマルチバイト文字列を宛先配列にコピーします。 |
「OCIMultiByteStrnDisplayLength()」 |
マルチバイト文字列が占める表示位置のバイト数を、nバイト以内で戻します。 |
|
|
「OCIWideCharInSizeToMultiByte()」 |
ワイドキャラクタ文字列の一部をマルチバイト文字列に変換します。 |
「OCIWideCharMultiByteLength()」 |
マルチバイト・エンコーディングの際、ワイドキャラクタで必要なバイト数を判断します。 |
「OCIWideCharStrCaseConversion()」 |
ワイドキャラクタ文字列を指定された大/小文字に変換し、結果を宛先配列にコピーします。 |
|
ワイドキャラクタ文字列を宛先文字列に追加します。 |
|
文字列内にある最初のワイド・キャラクタを検索します。検索が正常終了すると、ワイド・キャラクタへのポインタを戻します。 |
|
2つのワイドキャラクタ文字列を、バイナリ、言語または大/小文字を区別しない比較メソッドを使用して比較します。 |
|
ワイドキャラクタ文字列を宛先配列にコピーします。次に、コピーされた文字数を戻します。 |
|
ワイドキャラクタ文字列の文字数を戻します。 |
|
ワイドキャラクタ文字列を宛先文字列にn文字以内で追加します。 |
|
2つのワイドキャラクタ文字列を、バイナリ、言語または大/小文字を区別しないメソッドを使用して比較します。各文字列は指定された長さです。 |
|
ワイドキャラクタ文字列を宛先配列にn文字以内でコピーします。 |
|
ワイドキャラクタ文字列内にある最後の文字を検索します。 |
|
指定されたワイド・キャラクタを対応する小文字に変換します。 |
|
|
|
指定されたワイド・キャラクタを対応する大文字に変換します。 |
構文
sword OCIMultiByteInSizeToWideChar ( void *hndl, OCIWchar *dst, size_t dstsz, const OraText *src, size_t srcsz, size_t *rsize );
パラメータ
文字列のキャラクタ・セットを判断するOCI環境ハンドルまたはユーザー・セッション・ハンドルです。
宛先バッファへのwchar
のポインタです。dstsz
が0 (ゼロ)の場合、NULL
ポインタを使用できます。
文字数単位で示した宛先バッファ・サイズです。0 (ゼロ)の場合、変換に必要な文字数が戻されます。
変換対象のソース文字列です。
バイトで示したソース文字列の長さです。
宛先バッファに書き込まれる文字数です。または、dstsz
が0 (ゼロ)の場合、変換された文字列の文字数です。NULL
ポインタの場合、何も戻されません。
コメント
このルーチンは、マルチバイト文字列の一部をワイドキャラクタ文字列に変換します。出力バッファ・サイズの制限か入力バッファ・サイズの制限に達するまで、またはソース文字列でNULL
終端文字が出現するまで、何文字でも文字をすべて変換します。出力バッファは、領域に余裕がある場合、NULL
で終了します。dstsz
が0(ゼロ)の場合、NULL
終端文字を含まない、変換文字列に必要な文字数のみ戻されます。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。
構文
size_t OCIMultiByteStrCaseConversion ( void *hndl, OraText *dststr, const OraText *srcstr, ub4 flag );
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
NULL
で終了する文字列へのポインタです。
NULL
で終了する文字列へのポインタです。
比較メソッドを決定するために使用されます。次のいずれかの値です。
OCI_NLS_BINARY
: バイナリ比較。これがデフォルト値です。
OCI_NLS_LINGUISTIC
: ロケールで指定された言語比較。
このフラグをOCI_NLS_CASE_INSENSITIVE
とともに使用することにより、大/小文字を区別しない比較を実行できます。たとえば、大/小文字を区別せずに文字列の言語を比較するには、OCI_NLS_LINGUISTIC|OCI_NLS_CASE_INSENSITIVE
を使用します。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルへのポインタです。
追加先のマルチバイト文字列へのポインタです。
追加するソース・マルチバイト文字列へのポインタです。
追加するsrcstr
のバイト数です。
コメント
この関数は、OCIMultiByteStrcat()と類似しています。srcstr
から最大nバイトがdststr
に追加されます。srcstr
のNULL
終端文字によって追加が終了され、n
バイト以内で関数は可能な数の文字を追加します。dststr
パラメータはNULL
で終了します。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。
構文
int OCIMultiByteStrncmp ( void *hndl, const OraText *str1, size_t len1, OraText *str2, size_t len2, int flag );
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
最初の文字列へのポインタです。
比較する最初の文字列の長さです。
2番目の文字列へのポインタです。
比較する2番目の文字列の長さです。
比較メソッドを決定するために使用されます。次のいずれかの値です。
OCI_NLS_BINARY
: バイナリ比較。これがデフォルト値です。
OCI_NLS_LINGUISTIC
: ロケールで指定された言語比較。
このフラグをOCI_NLS_CASE_INSENSITIVE
とともに使用することにより、大/小文字を区別しない比較を実行できます。たとえば、大/小文字を区別せずに文字列の言語を比較するには、OCI_NLS_LINGUISTIC|OCI_NLS_CASE_INSENSITIVE
を使用します。
コメント
この関数はOCIMultiByteStrcmp()と類似していますが、最大str1
からlen1
バイト、str2
からlen2
バイトが比較される点が異なります。比較では、NULL
終端文字が使用されます。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルへのポインタです。
ソース・マルチバイト文字列へのポインタです。
宛先バッファへのポインタです。
コピーするsrcstr
のバイト数です。
コメント
この関数は、OCIMultiByteStrcpy()と類似しています。ただし、srcstr
が指し示す配列からdststr
が指し示す配列にコピーされるのは、最大nバイトです。srcstr
のNULL
終端文字によってコピーが終了され、n
バイト以内で関数は可能な数の文字をコピーします。結果の文字列は、NULL
で終了します。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。
構文
sword OCIWideCharInSizeToMultiByte ( void *hndl, OraText *dst, size_t dstsz, const OCIWchar *src, size_t srcsz, size_t *rsize );
パラメータ
文字列のキャラクタ・セットを判断するOCI環境ハンドルまたはユーザー・セッション・ハンドルです。
マルチバイトの宛先バッファです。dstsz
が0(ゼロ)の場合、NULL
ポインタを使用できます。
バイト単位で示した宛先バッファ・サイズです。0 (ゼロ)の場合、変換文字列に必要なサイズがバイト単位で戻されます。
変換対象のソースwchar
文字列です。
文字で示したソース文字列の長さです。
宛先バッファに書き込まれるバイト数です。または、dstsz
が0 (ゼロ)の場合、変換された文字列を格納するのに必要なバイト数です。NULL
ポインタの場合、何も戻されません。
コメント
ワイドキャラクタ文字列の一部をマルチバイト形式に変換します。出力バッファ・サイズか入力バッファ・サイズに達するまで、またはソース文字列でNULL
終端文字が出現するまで、何文字でも文字をすべて変換します。出力バッファは、領域に余裕がある場合、NULL
で終了します。dstsz
が0 (ゼロ)の場合、NULL
終端文字を含まない、変換された文字列の格納に必要なサイズがバイト単位で戻されます。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。
構文
size_t OCIWideCharStrCaseConversion ( void *hndl, OraText *dststr, const OraText *srcstr, ub4 flag );
パラメータ
OCI環境ハンドルまたはユーザー・セッション・ハンドルです。
宛先配列へのポインタです。結果の文字列は、NULL
で終了します。
ソース文字列へのポインタです。
大文字または小文字のいずれに変換するかを指定します。
OCI_NLS_UPPERCASE
: 大文字に変換します。
OCI_NLS_LOWERCASE
: 小文字に変換します。
このフラグをOCI_NLS_LINGUISTIC
とともに使用すると、ロケールの言語設定を大/小文字の変換に使用するよう指定できます。
コメント
srcstr
が指し示すワイドキャラクタ文字列を大文字または小文字(フラグによって指定)に変換し、その結果を、dststr
が指し示す配列にコピーします。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。
パラメータ
キャラクタ・セットを判断するOCI環境ハンドルまたはユーザー・セッション・ハンドルです。
NULL
で終了するwchar
文字列へのポインタ。
NULL
で終了するwchar
文字列へのポインタ。
比較メソッドを決定するために使用されます。次のいずれかの値です。
OCI_NLS_BINARY
: バイナリ比較。これがデフォルト値です。
OCI_NLS_LINGUISTIC
: ロケール定義で指定された言語比較。
このフラグをOCI_NLS_CASE_INSENSITIVE
とともに使用することにより、大/小文字を区別しない比較を実行できます。たとえば、大/小文字を区別せずに文字列の言語を比較するには、OCI_NLS_LINGUISTIC|OCI_NLS_CASE_INSENSITIVE
を使用します。
OCIWideCharStrcmp()
では、指定されたワイドキャラクタ引数の言語比較を実行するためにUNICODE_BINARYソート方法は使用できません。
コメント
wstr
が指し示すwchar
文字列の文字数(NULL
終端文字を含まない)を戻します。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。
パラメータ
キャラクタ・セットを判断するOCI環境ハンドルまたはユーザー・セッション・ハンドルです。
宛先wchar
文字列へのポインタです。
ソースwchar
文字列へのポインタです。
追加するwsrcstr
の文字数です。
コメント
この関数は、OCIWideCharStrcat()と類似しています。wsrcstr
から最大n文字がwdststr
に追加されます。wsrcstr
のNULL
終端文字によって追加が終了されます。wdststr
パラメータはNULL
で終了します。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。
構文
int OCIWideCharStrncmp ( void *hndl, const OCIWchar *wstr1, size_t len1, const OCIWchar *wstr2, size_t len2, int flag );
パラメータ
キャラクタ・セットを判断するOCI環境ハンドルまたはユーザー・セッション・ハンドルです。
最初のwchar
文字列へのポインタです。
比較する最初の文字列の長さです。
2番目のwchar
文字列へのポインタです。
比較する2番目の文字列の長さです。
比較メソッドを決定するために使用されます。次のいずれかの値です。
OCI_NLS_BINARY
: バイナリ比較の場合。これがデフォルト値です。
OCI_NLS_LINGUISTIC
: ロケールで指定された言語比較の場合。
このフラグをOCI_NLS_CASE_INSENSITIVE
とともに使用することにより、大/小文字を区別しない比較を実行できます。たとえば、大/小文字を区別せずに文字列の言語を比較するには、OCI_NLS_LINGUISTIC
|OCI_NLS_CASE_INSENSITIVE
を使用します。
コメント
この関数は、OCIWideCharStrcmp()と類似しています。2つのワイドキャラクタ文字列を、バイナリ、言語または大/小文字を区別しない比較メソッドを使用して比較します。wstr1
から最大len1
バイト、wstr2
から最大len2
バイトが比較されます。比較では、NULL
終端文字が使用されます。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。
OCIWideCharStrncmp()
では、指定されたワイドキャラクタ引数の言語比較を実行するためにUNICODE_BINARYソート方法は使用できません。
パラメータ
キャラクタ・セットを判断するOCI環境ハンドルまたはユーザー・セッション・ハンドルです。
宛先wchar
バッファへのポインタです。
ソースwchar
文字列へのポインタです。
コピーするwsrcstr
の文字数です。
コメント
この関数は、OCIWideCharStrcpy()と類似しています。ただし、wsrcstr
が指し示す配列からwdststr
が指し示す配列にコピーされるのは、最大n文字です。wdststr
内のNULL
終端文字に達するとコピーが停止され、生成される文字列の最後はNULL
です。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。
パラメータ
キャラクタ・セットを判断するOCI環境ハンドルまたはユーザー・セッション・ハンドルです。
検索するwchar
文字列へのポインタです。
検索対象のwchar
です。
コメント
wstr
が指し示すwchar
文字列内にある最後のwc
を検索します。OCIEnvNlsCreate()関数のSQL CHAR
データにOCI_UTF16ID
が指定されている場合、エラーが発生します。