Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Endereço IP armazenado como decimal - PL/SQL para exibir como quádruplo pontilhado


Esta é a função que você precisa:
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;

(Comentários sobre como tornar a função determinística e usar to_char incluídos - obrigado).

No Oracle 11G, você pode transformar o endereço IP formatado em uma coluna virtual na tabela de hosts:
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;

Essa coluna pode ser indexada para consultas, se necessário.

Sua consulta se torna:
select hostname, formatted_ip_address from host;