Oracle
 sql >> Base de données >  >> RDS >> Oracle

Adresse IP stockée sous forme décimale - PL/SQL à afficher sous forme de quad pointillé

Voici la fonction dont vous avez besoin :

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;

(Commentaires sur le fait de rendre la fonction déterministe et d'utiliser to_char pris en compte - merci).

Dans Oracle 11G, vous pouvez faire de l'adresse IP formatée une colonne virtuelle sur la table des hôtes :

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;

Cette colonne pourrait ensuite être indexée pour les requêtes si nécessaire.

Votre requête devient :

select hostname, formatted_ip_address from host;