UTL_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值的一部分。

使用说明

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(r);
  v := UTL_RAW.CAST_TO_VARCHAR2(r);
  dbms_output.put_line(v);
END;

返回结果包含原始字符串的内容以及转换后的VARCHAR2值:

\x4163636f756e7473
Accounts

CONCAT

语法说明

CONCAT函数将多个RAW值连接成一个RAW值:

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

此函数返回RAW值。与Oracle实施不同,PolarDB PostgreSQL版(兼容Oracle)实施是一种可变参数函数,并且不会限制可连接起来的值的数量。

参数

参数

说明

r1, r2, r3,…

CONCAT将连接的RAW值。

示例

使用CONCAT函数将多个RAW值连接成一个RAW值:

SELECT UTL_RAW.CONCAT('\x61', '\x62', '\x63') FROM DUAL;        

返回结果如下:

  concat  
----------
 \x616263
(1 row)

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)转换为原始值,然后将该值从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);
END;

返回VARCHAR2值、RAW值和转换后的值:

Accounts
\x4163636f756e7473
\x4163636f756e7473
\x4163636f756e7473

LENGTH

语法说明

LENGTH函数返回RAW值的长度:

LENGTH(r 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)

参数

参数

说明

r

表示将从中返回子字符串的RAW值。

pos

表示返回子字符串的第一个字节的RAW值中的位置。

  • 如果pos为0或1,则子字符串从RAW值的第一个字节开始截取子字符串。

  • 如果pos大于1,则子字符串从pos指定的第一个字节开始截取子字符串。例如,如果pos为3,则子字符串从值的第三个字节开始截取子字符串。

  • 如果pos为负数,则子字符串从源值末尾算起的pos字节开始截取子字符串。例如,如果pos为-3,则子字符串从值末尾算起的第三个字节开始截取子字符串。

len

表示将返回的最大字节数。

示例

  • 以下示例使用SUBSTR函数从RAW值的第3个字符开始截取子字符串:

    SET bytea_output = 'escape'; ---采用转义格式输出bytea数据
    SELECT UTL_RAW.SUBSTR(UTL_RAW.CAST_TO_RAW('Accounts'), 3, 5) FROM DUAL;

    显示结果如下:

     substr
    --------  
    count
    (1 row)
  • 使用SUBSTR函数从RAW值结尾的第5个字符开始截取子字符串:

    SET bytea_output = 'escape'; ---采用转义格式输出bytea数据
    SELECT UTL_RAW.SUBSTR(UTL_RAW.CAST_TO_RAW('Accounts'), -5 , 3) FROM DUAL;

    显示结果如下:

     substr
    --------
     oun
    (1 row)