Oracle的raw資料型別
這個型別以前沒碰到過,知道昨天有人問我,我才研究了一下。
後來發現原來Oracle資料字典裡面本身就有很多地方用到這個資料型別,如v$process的addr欄位等。
這是一個什麼樣的型別?看了下資料說是用於儲存二進位制格式的資料的,但是這樣的儲存有什麼好處呢?google了好多下,有段說明感覺比較明白易懂:
在網路中的計算機之間傳輸 RAW 資料時,或者使用 Oracle 實用程式將 RAW 資料從一個資料庫移到另一個資料庫時,Oracle 伺服器不執行字符集轉換。儲存實際列值所需要的位元組數大小隨每行大小而異,最多為 2,000 位元組。
可能這樣的資料型別在資料庫效率上會提高,而且對資料由於字符集的不同而導致的不一致的可能性在這邊也排除了。
這個欄位在實際的用途中好像不多。
raw型別的介紹,在此引用了一下網友的blog:
RAW,類似於CHAR,宣告方式RAW(L),L為長度,以位元組為單位,作為資料庫列最大2000,作為變數最大32767位元組。
LONG RAW,類似於LONG,作為資料庫列最大儲存2G位元組的資料,作為變數最大32760位元組
測試:
SQL> create table datatype_test_raw(paddr raw(8));
Table created
SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'));
insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'))
ORA-01401: inserted value too large for column
SQL> alter table datatype_test_raw modify paddr raw(20);
Table altered
SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'));
insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'))
ORA-01401: inserted value too large for column
SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw test!'));
1 row inserted
SQL> commit;
Commit complete
SQL> select * from datatype_test_raw;
PADDR
----------------------------------------
54686973206973206120726177207465737421
SQL> select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;
UTL_RAW.CAST_TO_VARCHAR2(PADDR
--------------------------------------------------------------------------------
This is a raw test!
SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('中文測試'));
1 row inserted
SQL> commit;
Commit complete
SQL> select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;
UTL_RAW.CAST_TO_VARCHAR2(PADDR
--------------------------------------------------------------------------------
This is a raw test!
中文測試
SQL> select paddr, utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;
PADDR UTL_RAW.CAST_TO_VARCHAR2(PADDR
---------------------------------------- --------------------------------------------------------------------------------
54686973206973206120726177207465737421 This is a raw test!
D6D0CEC4B2E2CAD4 中文測試
這裡用到了兩個函式:
utl_raw.cast_to_raw([varchar2]);--將varchar2轉換為raw型別
utl_raw.cast_to_varchar2([raw]);--將raw轉換為varchar2型別
這裡varchar2的字符集一般是GB2312。
另外:
utl_raw包的幾個其他的函式用法:
utl_raw.cast_from_number([number]);
utl_raw.cast_to_number([number]);
位操作:
utl_raw.bit_or();
utl_raw.bit_and();
utl_raw.bit_xor();
另外還有轉換函式:
hextoraw(); --將對應16進位制數轉換為raw
關於raw和utl_raw的介紹到此結束。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-543073/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- Oracle基本資料型別儲存格式淺析(五)——RAW型別Oracle資料型別
- Oracle資料型別Oracle資料型別
- Oracle 資料型別Oracle資料型別
- Oracle的number資料型別Oracle資料型別
- ORACLE的資料型別(轉)Oracle資料型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-LONG和LONG RAW變數SQL資料型別變數
- Oracle 中LONG RAW BLOB CLOB型別介紹Oracle型別
- Oracle資料型別對應Java型別Oracle資料型別Java
- 【轉】ORACLE資料型別Oracle資料型別
- Oracle anydata資料型別Oracle資料型別
- ORACLE NUMBER資料型別Oracle資料型別
- [轉]oracle資料型別Oracle資料型別
- Oracle中常用的資料型別Oracle資料型別
- oracle中date資料型別與timestamp資料型別的轉換Oracle資料型別
- Oracle OCP(19):資料型別Oracle資料型別
- Oracle資料型別介紹Oracle資料型別
- oracle 資料型別轉換Oracle資料型別
- ORACLE TIMESTAMP資料型別Oracle資料型別
- Oracle資料型別簡介Oracle資料型別
- Oracle LOB資料型別的處理Oracle資料型別
- Oracle中的TIMESTAMP資料型別Oracle資料型別
- RAW資料型別可以建立索引,但是不走索引測試(轉)資料型別索引
- oracle將表中date資料型別修改為timestamp資料型別Oracle資料型別
- 關於oracle中的sql資料型別OracleSQL資料型別
- 【NUMBER】Oracle的NUMBER資料型別特點Oracle資料型別
- Oracle的資料型別:char/varchar2Oracle資料型別
- Oracle字串資料型別簡述Oracle字串資料型別
- Oracle - LOB(大物件資料型別)Oracle物件資料型別
- Oracle8 資料型別(轉)Oracle資料型別
- oracle-複合資料型別Oracle資料型別
- 《卸甲筆記》-PostgreSQL和Oracle的資料型別的對比系列四:大資料型別筆記SQLOracle資料型別大資料
- js資料型別之基本資料型別和引用資料型別JS資料型別
- 資料型別: 資料型別有哪些?資料型別
- Long raw和Long型別總結型別
- 如何驗證Oracle資料庫中表的型別Oracle資料庫型別
- Oracle三種集合資料型別的比較Oracle資料型別
- Oracle時間型別資料為0的bugOracle型別