Oracle中Base64的使用
utl_encode包中的下面兩個函式是用來進行Base64編碼和解碼的
/*----------------------------------------------------------------*/
/* BASE64_ENCODE */
/*----------------------------------------------------------------*/
function base64_encode(r in raw) return raw;
/* BASE64_ENCODE */
/*----------------------------------------------------------------*/
function base64_encode(r in raw) return raw;
/*----------------------------------------------------------------*/
/* BASE64_DECODE */
/*----------------------------------------------------------------*/
function base64_decode(r in raw) return raw;
/* BASE64_DECODE */
/*----------------------------------------------------------------*/
function base64_decode(r in raw) return raw;
下面看看使用方法:
SQL> select utl_encode.BASE64_ENCODE('denglt2') from dual;
select utl_encode.BASE64_ENCODE('denglt2') from dual
ORA-01465: 無效的十六進位制數字
SQL> select utl_encode.BASE64_ENCODE(utl_raw.cast_to_raw('denglt2')) from dual;
UTL_ENCODE.BASE64_ENCODE(UTL_R
--------------------------------------------------------------------------------
5A4756755A3278304D673D3D
select utl_encode.BASE64_ENCODE('denglt2') from dual
ORA-01465: 無效的十六進位制數字
SQL> select utl_encode.BASE64_ENCODE(utl_raw.cast_to_raw('denglt2')) from dual;
UTL_ENCODE.BASE64_ENCODE(UTL_R
--------------------------------------------------------------------------------
5A4756755A3278304D673D3D
如果對Base64有點了解的話,這兒的結果肯定不是Base64的編碼('denglt2'對3求餘數後為1,按照Base64的編碼規範出來的結果最後兩個字元應該為==).我再進行如下的轉換
SQL> select utl_raw.cast_to_varchar2('5A4756755A3278304D673D3D') from dual;
UTL_RAW.CAST_TO_VARCHAR2('5A47
--------------------------------------------------------------------------------
ZGVuZ2x0Mg==
UTL_RAW.CAST_TO_VARCHAR2('5A47
--------------------------------------------------------------------------------
ZGVuZ2x0Mg==
這兒就是base64的編碼了。
現在我們再進行解碼:
SQL> select utl_raw.cast_to_varchar2(utl_encode. base64_decode(utl_raw.cast_to_raw('ZGVuZ2x0Mg=='))) from dual;
UTL_RAW.CAST_TO_VARCHAR2(UTL_E
--------------------------------------------------------------------------------
denglt2
UTL_RAW.CAST_TO_VARCHAR2(UTL_E
--------------------------------------------------------------------------------
denglt2
這兒有一點可能有點迷糊 "function base64_encode(r in raw) return raw"的返回型別是raw.實際上反回的是編號後字串的二進位制raw資料,同時在Oracle裡raw與十六進位制的字串是可以相互自動轉換的,所以看到的結果是5A4756755A3278304D673D3D。
raw與十六進位制的字串是可以相互自動轉換的例子(但BLOB型別不能夠):
SQL> create table t_blob (b blob);
Table created
SQL> insert into t_blob (b) values (utl_raw.cast_to_raw('denglt'));
1 row inserted
SQL> commit;
Commit complete
Table created
SQL> insert into t_blob (b) values (utl_raw.cast_to_raw('denglt'));
1 row inserted
SQL> commit;
Commit complete
SQL> set serveroutput on ;
SQL> declare
2 vB long raw;
3 vStr varchar2(2000);
4 begin
5 select b into vB from t_blob where rownum=1;
6 dbms_output.put_line(utl_raw.cast_to_varchar2(vB));
7 vStr := vB;
8 dbms_output.put_line(vStr);
9 vB := vStr;
10 dbms_output.put_line(utl_raw.cast_to_varchar2(vB));
11 end;
12 /
denglt
64656E676C74
denglt
PL/SQL procedure successfully completed
2 vB long raw;
3 vStr varchar2(2000);
4 begin
5 select b into vB from t_blob where rownum=1;
6 dbms_output.put_line(utl_raw.cast_to_varchar2(vB));
7 vStr := vB;
8 dbms_output.put_line(vStr);
9 vB := vStr;
10 dbms_output.put_line(utl_raw.cast_to_varchar2(vB));
11 end;
12 /
denglt
64656E676C74
denglt
PL/SQL procedure successfully completed
declare
vB blob; --換成blob
vStr varchar2(2000);
begin
select b into vB from t_blob where rownum=1;
dbms_output.put_line(utl_raw.cast_to_varchar2(vB));
vStr := vB;
dbms_output.put_line(vStr);
vB := vStr;
dbms_output.put_line(utl_raw.cast_to_varchar2(vB));
end;
ORA-06550: 第 8 行, 第 10 列:
PLS-00382: 表示式型別錯誤
ORA-06550: 第 8 行, 第 2 列:
PL/SQL: Statement ignored
ORA-06550: 第 10 行, 第 8 列:
PLS-00382: 表示式型別錯誤
ORA-06550: 第 10 行, 第 2 列:
PL/SQL: Statement ignored
vB blob; --換成blob
vStr varchar2(2000);
begin
select b into vB from t_blob where rownum=1;
dbms_output.put_line(utl_raw.cast_to_varchar2(vB));
vStr := vB;
dbms_output.put_line(vStr);
vB := vStr;
dbms_output.put_line(utl_raw.cast_to_varchar2(vB));
end;
ORA-06550: 第 8 行, 第 10 列:
PLS-00382: 表示式型別錯誤
ORA-06550: 第 8 行, 第 2 列:
PL/SQL: Statement ignored
ORA-06550: 第 10 行, 第 8 列:
PLS-00382: 表示式型別錯誤
ORA-06550: 第 10 行, 第 2 列:
PL/SQL: Statement ignored
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/195110/viewspace-677977/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python中base64Python
- Oracle中job的使用詳解Oracle
- ORACLE中%TYPE和%ROWTYPE的使用Oracle
- Oracle中Decode()函式的使用Oracle函式
- [python] base64使用方法Python
- 使用Base64進行string的加密和解密加密解密
- Java 8中的Base64編碼和解碼Java
- 在oracle中監視索引的使用情況Oracle索引
- 在Hibernate中關於Oracle sequence的使用KHOracle
- Oracle blob型別資料轉換成 base64編碼Oracle型別
- js中關於base64的一些事JS
- JS 中關於 base64 的一些事JS
- Rust中字串的base64編碼與解碼Rust字串
- 瀏覽器中的原生base64方法瀏覽器
- netty系列之:java中的base64編碼器NettyJava
- oracle OMF的使用Oracle
- netty系列之:netty中的核心編碼器base64Netty
- oracle中的某一個使用者名稱修改Oracle
- Android 中 Base64 轉換成 圖片Android
- 在PHP裡使用 ImageMagick 生成 base64 圖片PHP
- base64
- oracle 中的事務Oracle
- Oracle 中的exception——(Raise)OracleExceptionAI
- Oracle中的sql hintOracleSQL
- Base64 的優缺點
- base64的實現原理
- 【OMF】使用Oracle的OMF 特性Oracle
- Oracle使用*的注意事項Oracle
- Oracle ASM AMDU工具的使用OracleASM
- oracle 序列的建立與使用Oracle
- oracle 臨時表的使用Oracle
- WebAssembly體驗之編碼base64(AssemblyScript使用教程)Web
- Base64原理
- Android Base64Android
- Base64 原理
- Oracle中的B樹索引Oracle索引
- oracle樹中prior的用法Oracle
- 11、Oracle中的檢視Oracle
- 關於oracle中的undoOracle