文字列の操作用に、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が指定されている場合、エラーが発生します。