Netapsys Blog

Aller au contenu | Aller au menu | Aller à la recherche

Comment transformer un fichier XML en SQL ?

Comment transformer un fichier XML en SQL ?

Voilà la problématique que je viens de rencontrer.

J'ai un fichier xml de 160 Mo contenant quasiment 5 millions de ligne.

J'ai essayé d'importer le fichier avec Excel en mettant comme source de données mon fichier xml, mais celui ci apres bien 4h d'import m'a affiché un beau message d'erreur :-( . Pierre-Yves m'a alors proposé de regarder du coté de xslt.

XSLT est un langage qui permet de transformer un (ou plusieurs) documents XML en un autre document XML, HTML ou texte.

Il est la plupart du temps utilisé afin de séparer les données (XML) du code/présentation (XSLT) pour un résultat final affichable (HTML). Une autre utilisation, moins répandue, est la conversion d'un schéma XML en un autre, afin de permettre l'interopérabilité entre des systèmes logiciels différents et qui communiquent par flux XML.

Dans notre cas nous voulons transformer du XML en SQL.

Lire la suite...

Intégrité référentielle et utilisation de fonctions SQL, ou comment rendre au SGBD une partie de ses responsabilités.

Faisons suite au dernier billet de Céline en restant dans le domaine des bases de données et des petites astuces connues de tous mais jamais utilisées. Intéressons nous à la gestion de l'intégrité référentielle et au calcul d'identifiants en laissant la base faire ce qu'elle sait faire et éviter un développement applicatif inutile.

Lire la suite...

Requêtes de recherche sous Oracle, Informix, Postgresql : gestion de la casse et des accents

Pour qu’un outil de recherche soit performant et agréable à utiliser, il faut qu’il soit capable de retourner tous les éléments susceptibles de correspondre à ce que l’utilisateur recherche sans tenir compte de la casse et/ou des accents.

Sous Oracle, il est possible d’utiliser l'opérateur « TRANSLATE » pour gérer ce genre de problème.

SELECT * FROM TABLE
WHERE TRANSLATE(UPPER(monChamp),’ ÉÈÊËÀÄÂÎÏÔÖÛÜ’,’ EEEEAAAIIOOUU’))
LIKE TRANSLATE(UPPER(‘%requêtes%’), ‘ÉÈÊËÀÄÂÎÏÔÖÛÜ’, ‘EEEEAAAIIOOUU’);

Sous Informix, il est possible de passer par le « MATCHES » et les regexp.

SELECT * FROM TABLE
WHERE UPPER(monChamp) MATCHES ‘*R\[EÉÈÊËéèêë\]Q\[UÛÜûü\]\[EÉÈÊËéèêë\]T\[EÉÈÊËéèêë\]S*’;

Après un «MATCHES», il est possible d’utiliser les symboles suivants :

  • * : représente une chaîne de 0 ou plusieurs caractères
  • ? : représente un seul caractère
  • […] : contient un ensemble de caractères

Sous Postgresql, la solution passe par l'utilisation du « SIMILAR TO » et des regexp.

SELECT * FROM TABLE
WHERE UPPER(monChamp) SIMILAR TO ‘%R\[EÉÈÊËéèêë\]Q\[UÛÜûü\]\[EÉÈÊËéèêë\]T\[EÉÈÊËéèêë\]S%’;

En résultat de requête, nous aurons bien toutes les lignes contenant ‘requete’ sans tenir compte de la casse et/ou des accents :

  • requete
  • requête
  • REQUETE
  • REQUÊTE
  • ...