有没有一种方法可以从oracle中的select语句编码字符串。
即
SELECT base64encode('mystring') FROM dual; --this doesn't work
欢迎使用base64或任何其他编码机制。一个可以解码的
Oracle具有该UTL_ENCODE
软件包,包括BASE64_ENCODE
和BASE64_DECODE
功能。这两个函数都适用于RAW
数据类型(输入值和返回值均为RAW
);因此,如果要将其用于字符数据类型(例如VARCHAR2
或)CLOB
,则需要使用其他转换-可以在UTL_RAW
包装中找到;功能类似于CAST_TO_RAW
和CAST_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字节。因此,对于很长的输入字符串,此方法可能无法如此处所示工作。
函数
utl_encode.base64_encode()/utl_encode.base64_decode()
最多只能使用32k个字符。如果您需要更多信息,请参见stackoverflow.com/questions/3804279/…@WernfriedDomscheit-好点,但是函数没有施加限制。而是,
RAW
数据类型本身限制为2000字节,或者具有扩展的最大字符串大小的32k字节。请注意,限制为32k字节;在多字节字符集中,此字符数可能少于32k。<2000 B(或<32 kB)的编码也可能RAW
导致RAW
比限制更长的时间...@WernfriedDomscheit现在很幸运,我想要一个简单的,因为我将仅编码10-15个字符。您也指出了这一点很有帮助