In Oracle Database, the HEXTORAW() function converts hexadecimal to a raw value.
Syntax
The syntax goes like this:
HEXTORAW(char)
Where char can be any of the CHAR, VARCHAR2, NCHAR, or NVARCHAR2 data types.
Example
Here’s an example:
SELECT HEXTORAW('74a5cfe') FROM DUAL;
Result:
074A5CFE
We can use the DUMP() function to find out the data type of the return value:
SELECT DUMP(HEXTORAW('74a5cfe')) FROM DUAL;
Result:
Typ=23 Len=4: 7,74,92,254
The Typ=23 tells us that the return value is of type 23, which is the type ID for RAW.
Just to be clear, here’s an example that compares the hexadecimal string and the raw value:
SELECT
DUMP('123') AS "r1",
DUMP(HEXTORAW('123')) AS "r2"
FROM DUAL;
Result:
r1 r2 _________________________ _____________________ Typ=96 Len=3: 49,50,51 Typ=23 Len=2: 1,35
The hexadecimal value is of type 96, which is the type ID for CHAR and NCHAR.
Non Hex Characters
Passing a value that’s not a hexadecimal value results in an error.
Example:
SELECT HEXTORAW('z') FROM DUAL;
Result:
Error report - ORA-01465: invalid hex number
Null Argument
If the argument is null, the result is null:
SET NULL 'null';
SELECT HEXTORAW(null)
FROM DUAL;
Result:
null
By default, SQLcl and SQL*Plus return a blank space whenever a null value occurs as a result of a SQL SELECT statement.
However, you can use SET NULL to specify a different string to be returned. Here I specified that the string null should be returned.
Invalid Argument Count
Calling HEXTORAW() without any arguments results in an error:
SELECT HEXTORAW()
FROM DUAL;
Result:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"
And passing too many arguments also results in an error:
SELECT HEXTORAW('a', 'b')
FROM DUAL;
Result:
SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments"