IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

problème de séparateurs dans un script sql


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 78
    Par défaut problème de séparateurs dans un script sql
    bonjour,
    j'ai généré un script sql à l'aide de l'outil SQLManagerX, et ca dans le but de migrer mes données de H/F vers MySQL.
    ce script contient l'ensemble des requêtes qui vont me permettre d'importer les données de H/F vers ma nouvelle base dans Mysql.
    lorsque j'exeute le script dans PHPMyAdmin,il me génère une erreur :"parenthèse fermente manquante".
    voici une parti du code de mon script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO C_Expedition (ExpNum,TransNum,ExpDate,CréeLe,CréePar,ExpCommentaire,MagCode,ExpNumBord)
     VALUES (4 , 4 , '20080614' , '20080604' , '' , 'la tournée n'a pas été enregistrée' , 'PRINCIPAL' , 865432 );
    donc il considère l'apostrophe du contenu d'un champs de ma table comme étant un séparateur entre les champs de données et non pas une apostrophe.
    comment je peux remédier à ça ?
    merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    En doublant l'apostrophe dans la chaîne...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 78
    Par défaut
    merci pour la réponse rapide, mais je pense que j'ai mal exprimé ma demande!
    c'est vrai votre solution est juste comme on peut aussi précéder les apostrophes du texte des champs de données par un antislash
    mais je porte à votre connaissance que j'ai un scripte qui contient des requêtes "insert... values..." de 4Go de données, donc je vais pas m'amuser à chercher dans toutes les ligne du script et différencier entre les séparateurs et les apostrophes

    est ce qu'il y a un éditeur de texte qui peut manipuler la requête automatiquement?

  4. #4
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    je pense que vous voulez remplacez les quote entourés de caratères dont aucun n'est un espace, vu que les quotes "légitimes" sont soit précédés soit suivi d'un espace. Une expression régulière résoudra votre problème. (par exemple dans notepad++ mais il y a beaucoup de logiciels qui gèrent ça)

  5. #5
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Si t'es sous unix, utilise sed.
    Si t'es sous windows, installe cygwin, puis utilise sed.

    Sed te permet d'utiliser des expressions régulières pour réaliser des opérations sur les lignes de tes fichieres. Par exemple, remplacer ' par '' (deux fois ')

    Pour donner une petite idée (attention, ça ne marchera surement pas tel quel) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e 's/\'/\'\'/g' TonFichier.sql |sed -e 's/\(,\ \{1,\}\)\'\'/\1\'/g' |sed -e 's/\'\'\(\ \{1,\},\)/\1\'/g'
    Ca remplace tous les ' par '', puis ça remplace les '' près des virgules par des '...
    (il y a sûrement des versions plus compactes, mais je ne suis pas un spécialiste des regexp)

    EDIT :
    @Monstros : je pense que les quotes légitimes sont à proximité des virgules, et non des espaces ?

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 78
    Par défaut
    merci les amis pour les réponses.
    et bien précisemment à vous pacmann, vous avez bien compris ce je cherchais,
    effectivement j'ai installé Cyqwin car je travaille sur WinXP mais quand j'ai écris la ligne que vous m'avez donné et j'ai fais entrée !! rien ne s'est passé. en plus je sais pas comment modifier si ca marche pas

  7. #7
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    Citation Envoyé par pacmann Voir le message
    EDIT :
    @Monstros : je pense que les quotes légitimes sont à proximité des virgules, et non des espaces ?
    les quotes légitimes sont directement à coté d'un espace (qui lui même est à coté d'une virgule, oui), tandis que les illégitimes sont entourés de caractères qui ne sont pas des espaces. Ca revient un peu au même, sauf que tu connais les expressions régulières et donc tu as pu lui fournir un exemple, tant mieux ^^

  8. #8
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    @monstros : non, ce que je voulais dire, c'est que les ' légitimes ne sont pas forcéments à côté d'espaces.
    Exemple VALUES('marcel','robert','squelettor') passe très bien.
    D'ailleurs, je me dis qu'il ne faut pas oublier la première quote et la dernière (celles à côté des parenthèses...)

    @fulla :
    C'est vrai que les expressions régulières, c'est pas forcément évident dès le début...
    Je te conseille de poster sur :
    http://www.developpez.net/forums/forumdisplay.php?f=365
    (forum SHELL)

    Il y a des vrais experts

    Cela dit, j'ai testé la solution, et effectivement, c'est un peu de la merde.

    Le mieux pour échapper les quote, c'est de prendre les doubles quotes comme délimiteur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e "s/'/''/g" TonFichier.sql |sed -e "s/\(,\ \{1,\}\)''/\1'/g' |sed -e "s/''\(\ \{1,\},\)/\1'/g"
    Petite explication :
    s/expr1/expr2/ : substitue sur chaque ligne la première occurence de expr1 par expr2

    s/expr1/expr2/g : substitue sur chaque ligne toutes les occurences de expr1 par expr2

    | : envoie le résultat (substitution) de la première commande à une nouvelle commande.
    \ : échappe le caractère espace qui peut se trouver entre une virgule et une quote
    \{1,\} : donne un ordre de multiplicité au caractère précédent. Ici, on se dit qu'il pourrait y avoir entre 1 et n espaces entre la virgule et la quote

    \( ... \) : quand on entoure une expression entre parenthèses (échappées), ça permet de les réutiliser plus loin avec... (mon prochain point)

    \1 : récupère la première expression mise entre parenthèses échappées.
    (\n pour la nième)

    Voilà....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de séparateurs dans un script sql
    Par foulla dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 09/06/2008, 12h43
  2. Problème de séparateur dans fichier CSV
    Par mbibim63 dans le forum Excel
    Réponses: 4
    Dernier message: 05/07/2007, 08h29
  3. Msg 2714 (objet deja existant) dans un script SQL Server
    Par Makrier dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/11/2006, 11h40
  4. problème de guillemets dans un parametre SQL
    Par Pitou5464 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 29/08/2006, 20h56
  5. [MySQL] Problème de pagination dans un script.
    Par Scurz dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/08/2006, 12h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo