Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Als Dezimalzahl gespeicherte IP-Adresse – PL/SQL zur Anzeige als gepunktetes Viereck

Dies ist die Funktion, die Sie benötigen:

create or replace
function inttoip(ip_address integer) return varchar2
deterministic
is
begin
    return to_char(mod(trunc(ip_address/256/256/256),256))
           ||'.'||to_char(mod(trunc(ip_address/256/256),256))
           ||'.'||to_char(mod(trunc(ip_address/256),256))
           ||'.'||to_char(mod(ip_address,256));
end;

(Kommentare dazu, Funktionen deterministisch zu machen und to_char zu verwenden, wurden berücksichtigt - danke).

In Oracle 11G könnten Sie die formatierte IP-Adresse zu einer virtuellen Spalte in der Host-Tabelle machen:

alter table host
add formatted_ip_address varchar2(15)
generated always as
( to_char(mod(trunc(ip_address/256/256/256),256))
          ||'.'||to_char(mod(trunc(ip_address/256/256),256))
          ||'.'||to_char(mod(trunc(ip_address/256),256))
          ||'.'||to_char(mod(ip_address,256))
) virtual;

Diese Spalte könnte dann bei Bedarf für Abfragen indiziert werden.

Ihre Abfrage wird zu:

select hostname, formatted_ip_address from host;