Oracle
 sql >> Database >  >> RDS >> Oracle

Indirizzo IP memorizzato come decimale - PL/SQL da visualizzare come quattro punti

Questa è la funzione di cui hai bisogno:

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;

(Commenti sul rendere deterministica la funzione e sull'utilizzo di to_char preso a bordo - grazie).

In Oracle 11G potresti rendere l'indirizzo IP formattato una colonna virtuale sulla tabella 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;

Questa colonna potrebbe quindi essere indicizzata per le query, se necessario.

La tua richiesta diventa:

select hostname, formatted_ip_address from host;