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;
/