我需要处理像FE80:0000:0000:0000:0202:B3FF:FE1E:8329/120这样的ipv6范围,并使用 PL / SQL 块将地址存储在表中。
在我当前的实现中,我将地址转换为二进制,在while循环中迭代最小和最大地址,并将它们插入表中。
它适用于较小的范围,但需要一种有效的方法来处理大范围(使用fetch的大量插入行)
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 :(得分:0)
你应该考虑使用一个存储过程检查一个给定的ipv6地址是否在块中。
有两种方法: