2016-05-10 7 views
0

Ich muss einen ipv6-Bereich wie FE80: 0000: 0000: 0000: 0202: B3FF: FE1E: 8329/120 verarbeiten und die Adressen im Bereich in a speichern Tabelle mit PL/SQL Block.Effiziente Methode zum Erstellen eines ipv6-Bereichs, wenn ein Subnetz-Wert angegeben wird

In meiner aktuellen Implementierung konvertiere ich die Adresse in binäre, Iteration zwischen Minimum und Maximum Adressen in einer While-Schleife und Einfügen von ihnen in einer Tabelle.

Es funktioniert für kleinere Bereiche in Ordnung, aber eine effiziente Art und Weise müssen große Bereiche (etwas auf den Linien von Masseneinfügung mit Abruf) zu handhaben

while ipv6_counter_iterator <= ipv6_counter_max 
      loop 
     ipv6_value_intermediate := nvl(lpad(dec2bin(ipv6_counter_iterator), 
              ipv6_counter, 
              '0'), 
             ''); 
     ipv6_binary_value  := substr(ipv6_addr, 1, ipv6_range) || 
            ipv6_value_intermediate; 
     ipv6_address_value  := Binary_to_ipv6(ipv6_binary_value); 
     ipv6_counter_iterator := ipv6_counter_iterator + 1; 
     insert into sdb_ip_range_values 
      (ip_address, session_id) 
     values 
      (ipv6_address_value, session); 
     end loop; 
    END IF; 
+0

Sie sollten wirklich darüber nachdenken, was Sie tun. Das Speichern von Anfang und Ende des Bereichs sollte ausreichen und Ihnen wahrscheinlich eine bessere Leistung als das Speichern aller Adressen geben. – Peter

+0

Ja, aber in meinem Projekt muss ich mich mit dieser Adresse verbinden und einige Informationen verarbeiten, deshalb ist es für mich wichtig, alle Adressen im Bereich in einer Tabelle zu speichern –

Antwort

0

Sie eine gespeicherte Prozedur über die Verwendung, die, wenn ein überprüft denken sollten angegebene IPv6-Adresse ist im Block.

gibt es zwei Möglichkeiten dafür:

  • die IPv6-Adresse machen, und der Bereich binär und eine Subnetzmaske für sie bauen. Vergleichen Sie dann ein binäres UND der IPv6-Adresse und den Bereich. Es sollte dasselbe sein.
  • Der andere Weg wäre ein Test, wenn die Adresse größer oder gleich der Startadresse UND kleiner oder gleich der Endadresse ist.
Verwandte Themen