Oracle: Zahlen in verschiedene Zahlensystemen konvertieren

Auf dem Blog von Tom Kyte gibt es eine sehr komfortable Lösung von verschiedenen Zahlensystemen in ein anderes zu konvertieren.
Man installiert auf der Oracle DB ein paar Funktion und kann diese dann bequem nutzen.

http://tkyte.blogspot.de/2009/10/httpasktomoraclecomtkytehexdec.html

Hier habe ich den Code kopiert:

CREATE OR REPLACE FUNCTION to_base ( p_dec IN NUMBER, p_base IN NUMBER )
   RETURN VARCHAR2
IS
   l_str VARCHAR2 ( 255 ) DEFAULT NULL;
   l_num NUMBER DEFAULT p_dec;
   l_hex VARCHAR2 ( 16 ) DEFAULT '0123456789ABCDEF';
BEGIN
   IF ( p_dec IS NULL
    OR p_base IS NULL ) THEN
      RETURN NULL;
   END IF;

   IF ( TRUNC ( p_dec ) <> p_dec
    OR p_dec < 0 ) THEN
      RAISE PROGRAM_ERROR;
   END IF;

   LOOP
      l_str := SUBSTR ( l_hex, MOD ( l_num, p_base ) + 1, 1 ) || l_str;
      l_num := TRUNC ( l_num / p_base );
      EXIT WHEN ( l_num = 0 );
   END LOOP;

   RETURN l_str;
END to_base;
/

CREATE OR REPLACE FUNCTION to_dec ( p_str IN VARCHAR2, p_from_base IN NUMBER DEFAULT 16 )
   RETURN NUMBER
IS
   l_num NUMBER DEFAULT 0;
   l_hex VARCHAR2 ( 16 ) DEFAULT '0123456789ABCDEF';
BEGIN
   IF ( p_str IS NULL
    OR p_from_base IS NULL ) THEN
      RETURN NULL;
   END IF;

   FOR i IN 1 .. LENGTH ( p_str ) LOOP
      l_num := l_num * p_from_base + INSTR ( l_hex, UPPER ( SUBSTR ( p_str, i, 1 ) ) ) - 1;
   END LOOP;

   RETURN l_num;
END to_dec;
/

SHOW ERRORS

CREATE OR REPLACE FUNCTION to_hex ( p_dec IN NUMBER )
   RETURN VARCHAR2
IS
BEGIN
   RETURN to_base ( p_dec, 16 );
END to_hex;
/

CREATE OR REPLACE FUNCTION to_bin ( p_dec IN NUMBER )
   RETURN VARCHAR2
IS
BEGIN
   RETURN to_base ( p_dec, 2 );
END to_bin;
/

CREATE OR REPLACE FUNCTION to_oct ( p_dec IN NUMBER )
   RETURN VARCHAR2
IS
BEGIN
   RETURN to_base ( p_dec, 8 );
END to_oct;
/
Print Friendly, PDF & Email

Schreibe einen Kommentar