sql >> Base de Datos >  >> RDS >> Oracle

Dirección IP almacenada como decimal - PL/SQL para mostrar como cuádruple punteado

Esta es la función que necesita:

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;

(Comentarios sobre cómo hacer que la función sea determinista y usar to_char tomados en cuenta - gracias).

En Oracle 11G, podría convertir la dirección IP formateada en una columna virtual en la tabla de host:

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;

Esta columna podría luego indexarse ​​para consultas si es necesario.

Su consulta se convierte en:

select hostname, formatted_ip_address from host;