sql >> Database >  >> RDS >> Oracle

IP-adres opgeslagen als decimaal - PL/SQL om weer te geven als gestippelde quad

Dit is de functie die je nodig hebt:

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;

(Opmerkingen over het deterministisch maken van functies en het gebruik van to_char genomen - bedankt).

In Oracle 11G zou je van het geformatteerde IP-adres een virtuele kolom op de hosttabel kunnen maken:

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;

Deze kolom kan dan indien nodig worden geïndexeerd voor zoekopdrachten.

Uw vraag wordt:

select hostname, formatted_ip_address from host;


  1. Hoe voer je elk uur een opgeslagen procedure in de SQL-server uit?

  2. Gebruik Create Statement om een ​​tabel te maken in SQL Server - SQL Server / T-SQL Tutorial Part 34

  3. Wat is uw mening over het gebruik van tekstuele identifiers in tabelkolommen bij het benaderen van de database met normalisatie en schaalbaarheid in gedachten?

  4. Hoe kan ik een kolom vullen met willekeurige getallen in SQL? Ik krijg dezelfde waarde in elke rij