温馨提示:本文翻译自stackoverflow.com,查看原文请点击:sql - encoding and decoding in oracle select statement
encoding oracle sql

sql - oracle select语句中的编码和解码

发布于 2020-04-18 10:44:59

有没有一种方法可以从oracle中的select语句编码字符串。

SELECT base64encode('mystring') FROM dual; --this doesn't work

欢迎使用base64或任何其他编码机制。一个可以解码的

查看更多

提问者
Omari Victor Omosa
被浏览
59
mathguy 2020-02-04 22:29

Oracle具有该UTL_ENCODE软件包,包括BASE64_ENCODEBASE64_DECODE功能。这两个函数都适用于RAW数据类型(输入值和返回值均为RAW);因此,如果要将其用于字符数据类型(例如VARCHAR2或)CLOB,则需要使用其他转换-可以在UTL_RAW包装中找到功能类似于CAST_TO_RAWCAST_TO_VARCHAR2

这是一个简单的例子。我从字符串开始'mathguy'VARCHAR2数据类型);首先,我将其转换为RAW,然后对其进行编码to base64然后,为了演示解码步骤,我将该BASE64_DECODE函数应用于第一个查询的输出,并将结果RAW转换VARCHAR2; 第二个查询的结果应该是第一个查询的输入。让我们来看看:

select utl_encode.base64_encode(utl_raw.cast_to_raw('mathguy')) as encoded
from   dual;

/* ENCODING */

ENCODED
------------------------
625746306147643165513D3D


/* DECODING */

select utl_raw.cast_to_varchar2(
         utl_encode.base64_decode('625746306147643165513D3D')) as decoded
from   dual;

DECODED
-----------
mathguy

编辑请参阅下面的Wernfried Domscheit的注释:RAW数据类型限制为2000字节,或者具有扩展的最大字符串大小的32767字节。因此,对于很长的输入字符串,此方法可能无法如此处所示工作。