UTL_RAW パッケージを使用すると、RAW 型データを操作または取得することができます。

管理者は、このパッケージを使用する前に、各ユーザーまたはグループに実行権限を付与する必要があります。
関数/プロシージャ カテゴリー 戻り値の型 説明
CAST_TO_RAW(c IN VARCHAR2) 関数 RAW VARCHAR2 文字列を RAW 値に変換します。
CAST_TO_VARCHAR2(r IN RAW) 関数 VARCHAR2 RAW 値を VARCHAR2 文字列に変換します。
CONCAT(r1 IN RAW, r2 IN RAW, r3 IN RAW,...) 関数 RAW 複数の RAW 値を単一の RAW 値に連結します。
CONVERT(r IN RAW, to_charset IN VARCHAR2, from_charset IN VARCHAR2 関数 RAW エンコードされたデータをあるエンコード形式から別のエンコード形式に変換し、その結果を RAW 値として返します。
LENGTH(r IN RAW) 関数 NUMBER RAW 値の長さを返します。
SUBSTR(r IN RAW, pos IN INTEGER, len IN INTEGER) 関数 RAW RAW 値の一部を返します。

Oracle 互換 PolarDB データベースでの UTL_RAW の実装は、ネイティブ Oracle と比較すると部分的な実装です。 上記の表にリストされている関数とプロシージャのみがサポートされています。

CAST_TO_RAW

CAST_TO_RAW 関数を使用して、VARCHAR2 文字列を RAW 値に変換します。 関数シグネチャーは次のとおりです。

CAST_TO_RAW(c VARCHAR2)

NULL 以外の値を渡すと、この関数は RAW 値を返します。 NULL 値を渡すと、関数は NULL を返します。

パラメーター

パラメーター 説明
c RAW に変換される VARCHAR2 値。

次の例は、CAST_TO_RAW 関数が VARCHAR2 文字列を RAW 値に変換する方法を示しています。

DECLARE
  v VARCHAR2;
  r RAW;
BEGIN
  v := 'Accounts';
  dbms_output.put_line(v);
  r := UTL_RAW.CAST_TO_RAW(v);
  dbms_output.put_line(r);
END;

結果セットには、元の文字列のコンテンツと変換された RAW 値が含まれます。

Accounts
\x4163636f756e7473

CAST_TO_VARCHAR2

CAST_TO_VARCHAR2 関数を使用して、RAW データを VARCHAR2 データに変換します。 関数シグネチャーは次のとおりです。

CAST_TO_VARCHAR2(r RAW)

NULL 以外の値を渡すと、関数は VARCHAR2 値を返します。 NULL 値を渡すと、関数は NULL を返します。

パラメーター

パラメーター 説明
r VARCHAR2 値に変換される RAW 値。

次の例は、CAST_TO_VARCHAR2 関数が RAW 値を VARCHAR2 文字列に変換する方法を示しています。

DECLARE
  r RAW;
  v VARCHAR2;
BEGIN
  r := '\x4163636f756e7473'
  dbms_output.put_line(v);
  v := UTL_RAW.CAST_TO_VARCHAR2(r);
  dbms_output.put_line(r);
END;

結果セットには、元の文字列のコンテンツと変換された RAW 値が含まれます。

\x4163636f756e7473
Accounts

CONCAT

CONCAT 関数を使用して、複数の RAW 値を単一の RAW 値に連結します。 関数シグネチャーは次のとおりです。

CONCAT(r1 RAW, r2 RAW, r3 RAW,...)

関数は RAW 値を返します。 Oracle の実装とは異なり、Oracle 互換 PolarDB データベースの実装は可変長引数関数であり、連結できる値の数を制限しません。

パラメーター

パラメーター 説明
r1, r2, r3,... CONCAT が連結する RAW 値。

次の例は、CONCAT 関数が複数の RAW 値を単一の RAW 値に連結する方法を示しています。

SELECT UTL_RAW.CAST_TO_VARCHAR2(UTL_RAW.CONCAT('\x61', '\x62', '\x63')) FROM DUAL;  concat
--------  abc(1 row)

結果として連結された値は、CAST_TO_VARCHAR2 関数によって VARCHAR2 形式に変換されます。

CONVERT

CONVERT 関数を使用して、文字列をあるエンコード形式から別のエンコード形式に変換し、その結果を RAW 値として返します。 関数シグネチャーは次のとおりです。

CONVERT(r RAW, to_charset VARCHAR2, from_charset VARCHAR2)

関数は RAW 値を返します。

パラメーター

パラメーター 説明
r 変換される RAW 値。
to_charset r が変換されるエンコード形式の名前。
from_charset r の変換元のエンコード形式の名前。

次の例は、UTL_RAW.CAST_TO_RAW 関数がVARCHAR2 文字列 Accounts を RAW 型の値に変換し、RAW 型の値を UTF8 から LATIN7 に変換してから、値を LATIN7 から UTF8 に変換する方法を示しています。

DECLARE   r RAW;   v VARCHAR2;BEGIN   v:= 'Accounts';   dbms_output.put_line(v);
  r:= UTL_RAW.CAST_TO_RAW(v);   dbms_output.put_line(r);   r:= UTL_RAW.CONVERT(r, 'UTF8', 'LATIN7');   dbms_output.put_line(r);   r:= UTL_RAW.CONVERT(r, 'LATIN7', 'UTF8');   dbms_output.put_line(r);

この例では、VARCHAR2 値、RAW 値、および変換された値が返されます。

Accounts
\x4163636f756e7473
\x4163636f756e7473
\x4163636f756e7473

LENGTH

LENGTH 関数を使用して、RAW 値の長さを返します。 関数シグネチャーは次のとおりです。

LENGTH(r RAW)

関数は RAW 値を返します。

パラメーター

パラメーター 説明
r LENGTH が評価する RAW 値。

次の例は、LENGTH 関数が RAW 値の長さを返す方法を示しています。

SELECT UTL_RAW.LENGTH(UTL_RAW.CAST_TO_RAW('Accounts')) FROM DUAL;  length
--------8(1 row)

次の例では、LENGTH 関数を使用して、マルチバイト文字を含む RAW 値の長さを返します。

SELECT UTL_RAW.LENGTH(UTL_RAW.CAST_TO_RAW('独孤求败'));
 length
--------
     12
(1 row)

SUBSTR

SUBSTR 関数を使用して、RAW 値の部分文字列を返します。 関数シグネチャーは次のとおりです。

SUBSTR (r RAW, pos INTEGER, len INTEGER)

関数は RAW 値を返します。

パラメーター

パラメーター 説明
r 部分文字列が戻される RAW 値。
pos RAW 値内で、返される部分文字列の最初のバイトのが置かれている位置。
  • pos が 0 または 1 に設定されている場合、部分文字列は RAW 値の最初のバイトから始まります。
  • pos が 1 より大きい場合、部分文字列は pos で指定されたバイト位置から始まります。 たとえば、pos が 3 に 設定されている場合、部分文字列は値の 3 番目のバイトから始まります。
  • pos が負の場合、部分文字列は元の値の最後から pos バイト分になります。 たとえば、pos が -3 に設定されている場合、部分文字列は値の最後から 3 番目のバイトから始まります。
len 返される最大バイト数。

次の例は、SUBSTR 関数が RAW 値の先頭から始まる 3 バイトの部分文字列を取得する方法を示しています。

SELECT UTL_RAW.SUBSTR(UTL_RAW.CAST_TO_RAW('Accounts'), 3, 5) FROM DUAL;
 substr--------  count(1 row)

次の例は、SUBSTR 関数が RAW 値の最後から 5 バイト分の部分文字列を取得する方法を示しています。

SELECT UTL_RAW.SUBSTR(UTL_RAW.CAST_TO_RAW('Accounts'), -5 , 3) FROM DUAL;
 substr
--------
 oun
(1 row)