UTL_RAW

更新時間:
Copy as MD

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

需要轉換的字串,此處將轉換為RAWVARCHAR2值。

樣本

使用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值中的位置。

  • 如果pos01,則子字串從RAW值的第一個位元組開始截取子字串。

  • 如果pos大於1,則子字串從pos指定的第一個位元組開始截取子字串。例如,如果pos3,則子字串從值的第三個位元組開始截取子字串。

  • 如果pos為負數,則子字串從源值末尾算起的pos位元組開始截取子字串。例如,如果pos為-3,則子字串從值末尾算起的第三個位元組開始截取子字串。

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)