SET SERVEROUTPUT ON DECLARE X RAW(1):=HEXTORAW('41'); BEGIN DBMS_OUTPUT.PUT_LINE(' A '||X); DBMS_OUTPUT.PUT_LINE(' A HEX '||RAWTOHEX(X)); DBMS_OUTPUT.PUT_LINE(' A RAWM '||TORAW(X)); END; / CREATE OR REPLACE FUNCTION TORAW(X IN VARCHAR2) RETURN VARCHAR2 IS AUX VARCHAR2(80):=X; RESULTADO VARCHAR2(80):=NULL; Y VARCHAR2(2); FUNCTION HEXADECIMAL(X IN VARCHAR2) RETURN NUMBER IS BEGIN RETURN CASE X WHEN '0' THEN 0 WHEN '1' THEN 1 WHEN '2' THEN 2 WHEN '3' THEN 3 WHEN '4' THEN 4 WHEN '5' THEN 5 WHEN '6' THEN 6 WHEN '7' THEN 7 WHEN '8' THEN 8 WHEN '9' THEN 9 WHEN 'A' THEN 10 WHEN 'B' THEN 11 WHEN 'C' THEN 12 WHEN 'D' THEN 13 WHEN 'E' THEN 14 WHEN 'F' THEN 15 END; END; BEGIN WHILE AUX IS NOT NULL LOOP Y:=SUBSTR(AUX,1,2); AUX:=SUBSTR(AUX,3); IF LENGTH(Y)=1 THEN Y:='0'||Y; END IF; RESULTADO:=RESULTADO||CHR(HEXADECIMAL(SUBSTR(Y,1,1))*16+HEXADECIMAL(SUBSTR(Y,2,1))); END LOOP; RETURN RESULTADO; END; / CREATE OR REPLACE FUNCTION TOHEX(X IN VARCHAR2) RETURN VARCHAR2 IS RESULTADO VARCHAR2(80):=NULL; FUNCTION DIGITO(X NUMBER) RETURN VARCHAR2 IS BEGIN RETURN CASE X WHEN 0 THEN '0' WHEN 1 THEN '1' WHEN 2 THEN '2' WHEN 3 THEN '3' WHEN 4 THEN '4' WHEN 5 THEN '5' WHEN 6 THEN '6' WHEN 7 THEN '7' WHEN 8 THEN '8' WHEN 9 THEN '9' WHEN 10 THEN 'A' WHEN 11 THEN 'B' WHEN 12 THEN 'C' WHEN 13 THEN 'D' WHEN 14 THEN 'E' WHEN 15 THEN 'F' END; END; FUNCTION HEXADECIMAL(X NUMBER) RETURN VARCHAR2 IS BEGIN RETURN DIGITO(TRUNC(X/16))||DIGITO(MOD(X, 16)); END; BEGIN FOR I IN 1..LENGTH(X) LOOP RESULTADO:=RESULTADO||HEXADECIMAL(ASCII(SUBSTR(X,I,1))); END LOOP; RETURN RESULTADO; END; /