Adresse IP stockées comme séparateur décimal - PL/SQL pour afficher en pointillés quad
Nous avons une base de données Oracle qui contient des adresses IP stockées comme des entiers décimaux - c'est incroyablement douloureux lors de la manipulation des données par les mains plutôt que via l'interface web, mais la main de la manipulation est très pratique et le réseau gars constamment nous demander de faire des choses étranges que l'interface web d'auteurs n'ont pas l'anticiper.
Quelqu'un pourrait-il me fournir le code PL/SQL ou autre méthode pour afficher ces décimales IPs comme décimale c'est à dire 123.123.123.123 format?
I. e. J'aimerais être en mesure d'exécuter une requête telle que :
select hostname, inttoip(ip_address) from host;
et ont la inttoip()
procédure d'affichage de l'adresse ip comme 203.30.237.2 au lieu de 3407801602.
Idéalement, j'aimerais une procédure qui fournit la fonction inverse aussi, par exemple,
insert into host (hostname,ip_address) values ('some-hostname', iptoint('203.30.237.2'));
J'ai perl pour ce faire, mais mon PL/SQL/Oracle de connaissances n'est pas suffisant pour un port en PL/SQL.
Sinon un moyen d'exécuter le perl comme la langue de la procédure au sein de l'oracle contexte analogue à celui-ci dans postgres:
CREATE FUNCTION perl_func (integer) RETURNS integer AS $$
<some perl>
$$ LANGUAGE plperl;
Serait formidable - si possible - peut-être même mieux que je le pouvais alors faire beaucoup de procédure des choses dans Oracle dans une langue que je suis familier avec.
OriginalL'auteur Jason Tan | 2009-07-05
Vous devez vous connecter pour publier un commentaire.
C'est la fonction dont vous avez besoin:
(Commentaires à propos de la fonction de décision déterministe et à l'aide de to_char pris à bord - grâce).
Dans Oracle 11G, vous pourriez faire la mise en forme de l'adresse IP virtuelle de la colonne dans la table d'hôtes:
Cette colonne pourrait ensuite être indexé pour les requêtes, si nécessaire.
Votre requête devient:
Vous pouvez même définir la MOD(.....) comme une colonne dans une vue de dessus de la table de base(s), en évitant le PL/SQL couche. 11g pourrait avoir comme une colonne virtuelle.
Je serais en utilisant explicite nombre de char de conversion en il ainsi moi-même je pense.
OriginalL'auteur Tony Andrews
OriginalL'auteur Jeffrey Kemp
Votre accueil. Merci pour l'astuce. La fonction ne contenant que les calculs doivent être déclarés comme déterministe.
Je ne suis pas sûr de ce que tu veux dire par ne contenant que des calculs. "déterministe" dites Oracle que le résultat de la fonction ne changera jamais sur la même entrée. Donc, si je voulais ajouter un index fonctionnel sur tout les inet_* fonctions, ils doivent être déclarés (et ils sont déjà déterministe par la nature).
OriginalL'auteur Robert Merkwürdigeliebe