oracle中RAW數據類型

来源:https://www.cnblogs.com/tewuapple/archive/2018/01/25/8352200.html
-Advertisement-
Play Games

近日在研究v$latch視圖時,發現一個從未見過的數據類型。v$latch 中ADDR屬性的數據類型為RAW(4|8) 同時也發現v$process中的ADDR屬性的數據類型也為RAW(4|8)。於是查了一下oracle 的SQL Language Reference文檔,文檔如下描述: The R ...


近日在研究v$latch視圖時,發現一個從未見過的數據類型。v$latch 中ADDR屬性的數據類型為RAW(4|8)  同時也發現v$process中的ADDR屬性的數據類型也為RAW(4|8)。於是查了一下oracle 的SQL Language Reference文檔,文檔如下描述:

The RAW and LONG RAW data types store data that is notto be explicitly converted by Oracle Database when moving data between differentsystems. These data types are intended for binary data or byte strings.For example, you can use LONG RAW to store graphics,sound, documents, or arrays of binary data, for which the interpretation isdependent on the use.

 

Oracle strongly recommends that you convertLONG RAW columns to binary LOB (BLOB) columns. LOB columns are subject to farfewer restrictions than LONG columns. See TO_LOB for more information.

 

RAW is a variable-lengthdata type like VARCHAR2, except that Oracle Net (whichconnects client software to a database or one database to another) and theOracle import and export utilities do not perform character conversion whentransmitting RAW or LONG RAW data. In contrast, Oracle Net and the Oracleimport and export utilities automatically convert CHAR, VARCHAR2, and LONG databetween different database character sets, if data is transported betweendatabases, or between the database character set and the client character set,if data is transported between a database and a client. The client characterset is determined by the type of the client interface, such as OCI or JDBC, andthe client configuration (for example, the NLS_LANG environment variable).

 

When Oracle implicitlyconverts RAW or LONG RAW data to CHAR data, the resulting character valuecontains a hexadecimal representation of the binary input, where each character is a hexadecimal digit (0-9, A-F)representing four consecutive bits of RAW data. For example, one byte of RAWdata with bits 11001011 becomes the value CB.

 

When Oracle implicitly converts CHAR datato RAW or LONG RAW, it interprets each consecutive input character as ahexadecimal representation of four consecutive bits of binary data and buildsthe resulting RAW or LONG RAW value by concatenating those bits. If any of theinput characters is not a hexadecimal digit (0-9, A-F, a-f), then an error isreported. If the number of characters is odd, then the result is undefined.

 

The SQL functions RAWTOHEX and HEXTORAWperform explicit conversions that are equivalent to the above implicitconversions. Other types of conversions between RAW and CHAR data are possiblewith functions in the Oracle-supplied PL/SQL packages UTL_RAW and UTL_I18N

 

 

大概意思是該數據類型用於存儲二進位格式的數據,像圖像,聲音,文檔等等,但是oracle建議使用lob替代raw,LOB列比LONG受到更少的限制

 

Raw的優勢: 在網路傳輸,或者使用導入導出工具時,oracle伺服器不執行字元集轉換,這樣在資料庫的效率上會有所提高,而且不會因為字元集不同而導致數據的不一致性

 

以下引用網友的測試,來說明Oracle implicitly converts RAW or LONG RAW data to CHAR data,the resulting character value contains a hexadecimal representation of thebinary input以及UTL_RAW的使用

 

RAW,類似於VARCHAR2,聲明方式RAW(L),L為長度,以位元組為單位,作為資料庫列最大2000,作為變數最大32767位元組。

LONGRAW,類似於LONG,作為資料庫列最大存儲2G位元組的數據,作為變數最大32760位元組

 

測試:

 

SQL>create table datatype_test_raw(paddr raw(8));

 

 

Tablecreated

 

SQL>insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a rawtype test!'));

 

insertinto datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw typetest!'))

 

ORA-01401:inserted value too large for column

 

SQL>alter table datatype_test_raw modify paddr raw(20);

 

Tablealtered

 

SQL>insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a rawtype test!'));

 

insertinto datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw typetest!'))

 

ORA-01401:inserted value too large for column

 

SQL>insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a rawtest!'));

 

1row inserted

 

SQL>commit;

 

Commitcomplete

 

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

--------------------------------------------------------------------------------

Thisis a raw test!

 

SQL>insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('中文測試'));

 

1row inserted

 

SQL>commit;

 

Commitcomplete

 

SQL>select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

 

UTL_RAW.CAST_TO_VARCHAR2(PADDR

--------------------------------------------------------------------------------

Thisis a raw test!

中文測試

 

SQL>select paddr, utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

 

PADDR                          UTL_RAW.CAST_TO_VARCHAR2(PADDR

------------------------------------------------------------------------------------------------------------------------

54686973206973206120726177207465737421This 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的介紹到此結束。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 個人讀書筆記,詳情參考《MySQL技術內幕 Innodb存儲引擎》 1,checkpoint產生的背景資料庫在發生增刪查改操作的時候,都是先在buffer pool中完成的,為了提高事物操作的效率,buffer pool中修改之後的數據,並沒有立即寫入到磁碟,這有可能會導致記憶體中數據與磁碟中的數據產 ...
  • 索引是用來快速檢索出具有特定值的記錄。如果沒有索引,資料庫就必須從第一條記錄開始進行全表掃描,直到找出相關的行。數據越多,檢索的代價就越高,檢索時如果表的列存在索引,那麼MySQL就能快速到達指定位置去搜索數據文件,而不必查看所有數據。 概述 索引依托於存儲引擎的實現,因此,每種存儲引擎的索引都不一 ...
  • 索引的優點 大大加快數據的查詢速度 使用分組和排序進行數據查詢時,可以顯著減少查詢時分組和排序的時間 創建唯一索引,能夠保證資料庫表中每一行數據的唯一性 在實現數據的參考完整性方面,可以加速表和表之間的連接 索引的缺點 創建索引和維護索引需要消耗時間,並且隨著數據量的增加,時間也會增加 索引需要占據 ...
  • 普通模式下 u 撤銷 ctrl + r 反撤銷 ...
  • 三台hadoop集群,分別是master、slave1和slave2。下麵是這三台機器的軟體分佈: master:NameNode、ZK、HiveMetaSotre、HiveServer2、SentryServer slave1:DataNode、ZK slave2:DataNode、ZK 2 軟體 ...
  • UDF函數中定義的集合對象何時初始化 udf函數放在sql中對某個欄位進行處理,那麼在底層會創建一個該類的對象,這個對象不斷的去調用這個evaluate(...)方法,截圖如下: 1.1 如果說對於每一條傳入UDF中需要處理的數據都需要全新的集合對象,那麼這個時候集合對象就需要在類中聲明,在eval ...
  • 聯合索引概念:當系統中某幾個欄位經常要做查詢,並且數據量較大,達到百萬級別,可多個欄位建成索引 使用規則: 1.最 左 原則,根據索引欄位,由左往右依次and(where欄位很重要,從左往右) 2.Or 不會使用聯合索引 3.where語句中查詢欄位包含全部索引欄位,欄位順序無關,可隨意先後... ...
  • 以下為二維表信息 //統計嚴重等級Bug SELECT severity,count(severity) FROM `bf_bugview` where product_id=476 GROUP BY severity //統計創建者Bug SELECT created_by_name,count( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...