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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle base64加密Oracle加密
- 使用Apache的Base64類實現Base64加解密Apache解密
- Flex中的Base64加解密Flex解密
- python中base64Python
- Oracle中Sequence的使用Oracle
- Oracle中AWR的使用Oracle
- oracle中sequence使用的限制Oracle
- oracle中java source的使用OracleJava
- Java 8中的Base64編碼和解碼Java
- Base64 編碼的程式設計使用.md程式設計
- [python] base64使用方法Python
- js中關於base64的一些事JS
- JS 中關於 base64 的一些事JS
- 瀏覽器中的原生base64方法瀏覽器
- ORACLE中%TYPE和%ROWTYPE的使用Oracle
- Oracle中job的使用詳解Oracle
- oracle中translate與replace的使用Oracle
- Oracle中“HINT”的使用方法Oracle
- oracle中database links的使用OracleDatabase
- Oracle中sequence的使用方法Oracle
- C#中base64之加密解密C#加密解密
- 使用Base64進行string的加密和解密加密解密
- Java Base64編碼使用介紹Java
- netty系列之:java中的base64編碼器NettyJava
- Base64系列第二篇 python中使用Base64編碼解碼Python
- Oracle中Decode()函式的使用Oracle函式
- ORACLE中SQL TRACE和TKPROF的使用OracleSQL
- Oracle中關於函式的使用Oracle函式
- oracle開發中序列的使用(轉)Oracle
- Android 中 Base64 轉換成 圖片Android
- base64
- oracle中cursor的使用經典資料Oracle
- ORACLE中RECORD、VARRAY、TABLE的使用詳解Oracle
- Oracle中組合索引的使用詳解Oracle索引
- oracle 10g中logminer的使用Oracle 10g
- 在PHP裡使用 ImageMagick 生成 base64 圖片PHP
- base64,雪碧圖CSS Sprite,直接使用圖片CSS
- 將ttf檔案base64編碼後使用