UTL_RAW
UTL_RAW包用於操作或檢索未經處理資料類型的長度。
前提條件
管理員必須提前為每個使用者或使用者組授予執行特權。
函數和預存程序
|
函數/預存程序 |
類型 |
傳回型別 |
說明 |
|
CAST_TO_RAW(c IN VARCHAR2) |
函數 |
RAW |
將VARCHAR2字串轉換為RAW值。 |
|
CAST_TO_VARCHAR2(r IN RAW) |
函數 |
VARCHAR2 |
將RAW值轉換為VARCHAR2字串。 |
|
CONCAT(r1 IN RAW, r2 IN RAW, r3 IN RAW,…) |
函數 |
RAW |
將多個RAW值串連成一個RAW值。 |
|
CONVERT(r IN RAW, to_charset IN VARCHAR2, from_charset IN VARCHAR2) |
函數 |
RAW |
將編碼資料從一種編碼轉換為另一種編碼,並將結果作為RAW值返回。 |
|
LENGTH(r IN RAW) |
函數 |
NUMBER |
返回RAW值的長度。 |
|
SUBSTR(r IN RAW, pos IN INTEGER, len IN INTEGER) |
函數 |
RAW |
返回RAW值的一部分。 |
使用說明
CAST_TO_RAW
文法說明
CAST_TO_RAW函數將VARCHAR2字串轉換為RAW值:
CAST_TO_RAW(c VARCHAR2)
-
如果傳遞非NULL值,則此函數返回RAW值。
-
如果傳遞NULL值,則此函數返回NULL。
参数
|
參數 |
說明 |
|
c |
需要轉換的字串,此處將轉換為RAW的VARCHAR2值。 |
樣本
使用CAST_TO_RAW函數將VARCHAR2字串轉換為RAW值:
DECLARE
v VARCHAR2;
r RAW;
BEGIN
v := 'Accounts';
dbms_output.put_line(v);
r := UTL_RAW.CAST_TO_RAW(v);
dbms_output.put_line(r);
END;
返回結果包含原始字串的內容以及轉換後的RAW值:
Accounts
\x4163636f756e7473
CAST_TO_VARCHAR2
文法說明
CAST_TO_VARCHAR2函數將RAW資料轉換為VARCHAR2資料:
CAST_TO_VARCHAR2(r RAW)
-
如果傳遞非NULL值,則此函數返回VARCHAR2值。
-
如果傳遞NULL值,則此函數返回NULL。
参数
|
參數 |
說明 |
|
r |
將轉換為VARCHAR2值的RAW值。 |
樣本
使用CAST_TO_VARCHAR2函數將RAW值轉換為VARCHAR2字串:
DECLARE
r RAW;
v VARCHAR2;
BEGIN
r := '\x4163636f756e7473';
dbms_output.put_line(r);
v := UTL_RAW.CAST_TO_VARCHAR2(r);
dbms_output.put_line(v);
END;
返回結果包含原始字串的內容以及轉換後的VARCHAR2值:
\x4163636f756e7473
Accounts
CONCAT
文法說明
CONCAT函數將多個RAW值串連成一個RAW值:
CONCAT(r1 RAW, r2 RAW, r3 RAW,…)
此函數返回RAW值。與Oracle實施不同,實施是一種可變參數函數,並且不會限制可串連起來的值的數量。
参数
|
參數 |
說明 |
|
r1, r2, r3,… |
CONCAT將串連的RAW值。 |
樣本
使用CONCAT函數將多個RAW值串連成一個RAW值:
SELECT UTL_RAW.CONCAT('\x61', '\x62', '\x63') FROM DUAL;
返回結果如下:
concat
----------
\x616263
(1 row)
CONVERT
文法說明
CONVERT函數將字串從一種編碼轉換為另一種編碼,並將結果作為RAW值返回:
CONVERT(r RAW, to_charset VARCHAR2, from_charset VARCHAR2)
此函數返回RAW值。
参数
|
參數 |
說明 |
|
r |
將轉換的RAW值。 |
|
to_charset |
r將轉換後的編碼的名稱。 |
|
from_charset |
r將執行轉換的源編碼的名稱。 |
樣本
以下樣本使用UTL_RAW.CAST_TO_RAW函數將VARCHAR2字串(Accounts)轉換為原始值,然後將該值從UTF8轉換為LATIN7,再將其從LATIN7轉換為UTF8:
DECLARE
r RAW;
v VARCHAR2;
BEGIN
v:= 'Accounts';
dbms_output.put_line(v);
r:= UTL_RAW.CAST_TO_RAW(v);
dbms_output.put_line(r);
r:= UTL_RAW.CONVERT(r, 'UTF8', 'LATIN7');
dbms_output.put_line(r);
r:= UTL_RAW.CONVERT(r, 'LATIN7', 'UTF8');
dbms_output.put_line(r);
END;
返回VARCHAR2值、RAW值和轉換後的值:
Accounts
\x4163636f756e7473
\x4163636f756e7473
\x4163636f756e7473
LENGTH
文法說明
LENGTH函數返回RAW值的長度:
LENGTH(r RAW)
参数
|
參數 |
說明 |
|
r |
LENGTH將計算的RAW值。 |
樣本
-
使用LENGTH函數返回RAW值的長度:
SELECT UTL_RAW.LENGTH(UTL_RAW.CAST_TO_RAW('Accounts')) FROM DUAL;返回結果如下:
length -------- 8 (1 row) -
使用LENGTH函數返回包含多位元組字元的RAW值的長度:
SELECT UTL_RAW.LENGTH(UTL_RAW.CAST_TO_RAW('獨孤求敗'));顯示結果如下:
length -------- 12 (1 row)
SUBSTR
文法說明
SUBSTR函數返回RAW值的子字串:
SUBSTR (r RAW, pos INTEGER, len INTEGER)
参数
|
參數 |
說明 |
|
r |
表示將從中返回子字串的RAW值。 |
|
pos |
表示返回子字串的第一個位元組的RAW值中的位置。
|
|
len |
表示將返回的最大位元組數。 |
樣本
-
以下樣本使用SUBSTR函數從RAW值的第3個字元開始截取子字串:
SET bytea_output = 'escape'; ---採用轉義格式輸出bytea資料 SELECT UTL_RAW.SUBSTR(UTL_RAW.CAST_TO_RAW('Accounts'), 3, 5) FROM DUAL;顯示結果如下:
substr -------- count (1 row) -
使用SUBSTR函數從RAW值結尾的第5個字元開始截取子字串:
SET bytea_output = 'escape'; ---採用轉義格式輸出bytea資料 SELECT UTL_RAW.SUBSTR(UTL_RAW.CAST_TO_RAW('Accounts'), -5 , 3) FROM DUAL;顯示結果如下:
substr -------- oun (1 row)