VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

UTL_ENCODE

功能描述

UTL_ENCODE包提供了将原始数据编码转换为标准编码格式的函数,以便数据可以在主机之间传输。

该内置包包含以下函数:

函数 描述
BASE64_DECODE 读取 base 64 编码的输入字符串并将其解码为其原始值RAW。
MIMEHEADER_ENCODE 将字符串编码为 MIME 格式。
QUOTED_PRINTABLE_DECODE 读取带引号的可打印格式输入字符串并将其解码为相应的字符串varchar2RAW。
TEXT_DECODE 解码字符集敏感文本字符串。
UUDECODE 读取uuencode 格式的输入字符串并将其解码为相应的字符串RAW。

注意事项

  • 该功能仅在数据库兼容模式为Oracle时能够使用(即创建DB时DBCOMPATIBILITY='A'),在其他数据库兼容模式下不能使用该特性。

  • 系统已经安装python3。python3安装方法请参见python3环境配置

  • 系统已经创建plpython3u插件,需设置环境变量PYTHONHOME,包括以下内容(重启数据库生效):

    • PYTHONHOME:python3安装路径。

    • LD_LIBRARY_PATH:python3安装路径下的lib目录。

    • PATH:python3安装路径bin目录。

    使用如下命令创建插件:

    CREATE EXTENSION plpython3u;
    

示例

前置步骤:创建并切换至兼容模式为Oracle的库。

create database db_oracle dbcompatibility ‘A’;
\c db_oracle

示例1:使用函数调用utl_encode内置包函数。

1、系统已经安装python3。

2、创建plpython3u插件。

CREATE EXTENSION plpython3u;

3、创建表以及插入raw数据。

create table raw_test (raw_date raw(10));
insert into raw_test values (utl_raw.cast_to_raw('051'));
create table raw2_test(text varchar);
insert into raw2_test values('zhangsan');

4、调用UUDECODE函数。

create or replace function func1() return raw
as
t_raw raw(50);
begin
select UTL_ENCODE.UUDECODE(raw_date) from raw_test into t_raw ;
dbms_output.put_line('t_time: '|| t_raw );
return t_raw;
end;
/

select func1 ();

返回结果为:

 func1
-------
  5510
(1 row)

5、调用BASE64_DECODE函数。

create or replace function func2() return raw
as
t_raw raw(50);
begin
select UTL_ENCODE.BASE64_DECODE(raw_date) from raw_test into t_raw ;
dbms_output.put_line('t_time: '|| t_raw );
return t_raw;
end;
/

select func2 ();

返回结果为:

 func2
-------
  D39D
(1 row)

6、调用QUOTED_PRINTABLE_DECODE函数。

create or replace function func3() return raw
as
t_raw raw(50);
begin
select UTL_ENCODE.QUOTED_PRINTABLE_DECODE(raw_date) from raw_test into t_raw ;
dbms_output.put_line('t_time: '|| t_raw );
return t_raw;
end;
/

select func3 ();

返回结果为:

 func3
-------
303531
(1 row)

7、调用TEXT_DECODE函数。

create or replace function func4() return varchar2
as
t_raw varchar2;
begin
select UTL_ENCODE.TEXT_DECODE(text) from raw2_test into t_raw ;
dbms_output.put_line('t_time: '|| t_raw );
return t_raw;
end;
/

select func4 ();

返回结果为:

 func4
-------
zhangsan
(1 row)

8、调用MIMEHEADER_ENCODE 函数。

create or replace function func5() return varchar2
as
t_raw varchar2;
begin
select UTL_ENCODE.MIMEHEADER_ENCODE(text) from raw2_test into t_raw ;
dbms_output.put_line('t_time: '|| t_raw );
return t_raw;
end;
/

select func5 ();

返回结果为:

     func5
------------------
=?UTF8?zhangsan?=
(1 row)

子程序

BASE64_DECODE

语法格式

UTL_ENCODE.BASE64_DECODE (
   r  IN RAW) 
RETURN RAW;

参数说明

r

base64编码的数据的RAW字符串。

函数返回值为解码后的RAW字符串。

MIMEHEADER_ENCODE

此函数返回一个”编码单词“作为输出。

输出采用以下形式:

=?<charset>?<encoding>?<encoded text>?= 
=?ISO-8859-1?Q?Here is some text?= 

语法格式

UTL_ENCODE.MIMEHEADER_ENCODE (
   buf            IN  VARCHAR2 CHARACTER SET ANY_CS, 
   encode_charset IN  VARCHAR2 DEFAULT NULL, 
   encoding       IN  PLS_INTEGER DEFAULT NULL) 
 RETURN string VARCHAR2 CHARACTER SET buf%CHARSET;

参数说明

  • buf

    待编码文本数据。

  • encode_charset

    用于编码的字符集,NULL表示使用数据库的字符集。

  • encoding

    编码格式。

    有效值为:

    • 1:表示base64

    • 2:表示quoted_printable

    默认值:quoted_printable

QUOTED_PRINTABLE_DECODE

语法格式

UTL_ENCODE.QUOTED_PRINTABLE_DECODE (
   r  IN RAW)
RETURN RAW;

参数说明

r

quoted_printable编码的数据的RAW字符串。

TEXT_DECODE

语法格式

UTL_ENCODE.TEXT_DECODE(
   buf            IN  VARCHAR2 CHARACTER SET ANY_CS, 
   encode_charset IN  VARCHAR2 DEFAULT NULL, 
   encoding       IN  PLS_INTEGER DEFAULT NULL) 
 RETURN string VARCHAR2 CHARACTER SET buf%CHARSET;

参数说明

  • buf

    已经编码好的文本数据。

  • encode_charset

    源文本数据字符集。

  • encoding

    编码格式。

    有效值为:

    • 1:表示base64

    • 2:表示quoted_printable

    默认值:quoted_printable

UUDECODE

语法格式

UTL_ENCODE.UUDECODE (
   r  IN RAW) 
RETURN RAW;

参数说明

r

已经编码好的文本数据。