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 資料型別Oracle資料型別
- Oracle的number資料型別Oracle資料型別
- 【轉】ORACLE資料型別Oracle資料型別
- Oracle anydata資料型別Oracle資料型別
- ORACLE NUMBER資料型別Oracle資料型別
- Oracle資料型別對應Java型別Oracle資料型別Java
- [20190930]oracle raw型別轉化number指令碼.txtOracle型別指令碼
- Oracle OCP(19):資料型別Oracle資料型別
- Oracle字串資料型別簡述Oracle字串資料型別
- [20191219]oracle timestamp資料型別的儲存.txtOracle資料型別
- Oracle和sqlserver資料型別對應OracleSQLServer資料型別
- 資料型別與函式索引-Oracle篇資料型別函式索引Oracle
- js資料型別之基本資料型別和引用資料型別JS資料型別
- [20241009]oracle timestamp with time zone資料型別的儲存.txtOracle資料型別
- oracle資料庫事務transaction 不同的鎖lock型別Oracle資料庫型別
- Oracle BLOB型別的資料如何檢視和下載?Oracle型別
- 資料型別: 資料型別有哪些?資料型別
- 1.1. Oracle 資料庫使用者型別Oracle資料庫型別
- Java中的基本資料型別與引用資料型別Java資料型別
- Android中asset資料夾和raw資料夾區別Android
- 區別值型別資料和引用型別資料型別
- 資料型別是什麼?Python的資料型別又有哪些?資料型別Python
- MySQL 的資料型別MySql資料型別
- JS的資料型別JS資料型別
- javaScript的資料型別JavaScript資料型別
- 資料型別,型別轉換資料型別
- Java 支援的資料型別與 MySQL 支援的資料型別對比Java資料型別MySql
- 資料型別資料型別
- JS中其他資料型別轉為number資料型別的方法JS資料型別
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數
- JAVA中基本資料型別和引用資料型別Java資料型別
- 3. php資料型別、資料型別轉換PHP資料型別
- Oracle 11G DBMS_REDEFINITION修改表資料型別Oracle資料型別
- 基本資料型別與API引用型別的使用資料型別API
- 基本資料型別與字串型別資料型別字串
- ORACLE日期型別Oracle型別
- SQLServer的常用資料型別SQLServer資料型別
- 常見的資料型別資料型別