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

Requêtes PostgreSQL Discussion :

Erreur dans une requête INSERT


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    503
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 503
    Par défaut Erreur dans une requête INSERT
    Bonjour,

    J'ai besoin d'un oeil neuf pour comprendre pourquoi ma requête INSERT ne fonctionne pas:

    Je crée ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE JUR (
    	jur_code			VARCHAR(5)		PRIMARY KEY,
    	jur_code_father		VARCHAR(5)		,
    	jur_label_eng		VARCHAR(50)		NOT NULL,
    	jur_label_fre		VARCHAR(50)		,
    	jur_comment			VARCHAR(2000)	,
    	CONSTRAINT fk_jur_code_father FOREIGN KEY(jur_code_father) REFERENCES JUR(jur_code)
    );
    Ma requête INSERT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO JUR (jur_code, jur_code_father, jur_label_eng, jur_label_fre, jur_comment)
    VALUES
    ("A", null, "Maritime zone", "Zone maritime", "Classification established in the Law Of The Sea : Internal Waters, Territorial Sea, Contiguous Zone, Exclusive Economic Zone, Continental Shelf, High Seas & Deep Ocean Floor")
    ;
    Erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    NOTICE:  l'identifiant « Classification established in the Law Of The Sea : Internal Waters, Territorial Sea, Contiguous Zone, Exclusive Economic Zone, Continental Shelf, High Seas & Deep Ocean Floor » sera tronqué en « Classification established in the Law Of The Sea : Internal Wat »
     
    ERROR:  la colonne « A » n'existe pas
    LINE 3: ("A", null, "Maritime zone", "Zone maritime", "Classificatio...
             ^ 
     
    ERREUR:  la colonne « A » n'existe pas
    SQL state: 42703
    Character: 96
    Où est l'os?

    Merci,

    Nico

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 485
    Par défaut
    Bonjour,
    I faut utiliser des simples quotes (') comme délimiteur de chaîne, et non des doubles quotes.

    Tatayo.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    503
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 503
    Par défaut
    Merci,

    Nico

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 516
    Par défaut
    Citation Envoyé par DiverSIG Voir le message
    Merci,

    Nico
    En complément de réponse, histoire d'éclaircir le message d'erreur cryptique, le délimiteur de chaîne en SQL est bien '. Il est d'ailleurs possible d'écrire '' au sein d'une chaîne pour y insérer une vraie apostrophe sans avoir à effectuer trop de contorsions. Elle sera bien reconnue comme telle ici et pas comme la fin d'une chaîne immédiatement suivie par le début d'une autre.

    Le guillemet " permet de décrire des identifiants quand ceux-ci contiennent des caractères spéciaux, c'est pourquoi le contenu de tes "…" est considéré comme un nom de colonne (à évaluer) et pas comme une chaîne littérale.

    Il convient de souligner que — contrairement à d'autres SGBD — PostGreSQL est très respectueux de la norme et échoue donc là où il y a lieu de le faire. C'est pourquoi on se retrouve face à ce genre de chose quand on a pris de mauvaises habitudes sur d'autres plateformes et c'est une bonne chose en soi.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 673
    Billets dans le blog
    10
    Par défaut
    On peut noter également que définir une primary key sur une colonne de type varchar est souvent un mauvais choix : le contenu des colonnes char ou varchar est rarement stable, car souvent signifiant. Or une PK doit avoir un contenu stable (asémantique), car elle se propage dans les tables filles au travers des foreign key. De plus, le char/varchar est beaucoup plus encombrant à nombre de valeurs égal. Aussi, le char/varchar est sensible à la collation. Enfin, du varchar très court comme varchar(5) ne présente aucun intérêt, pour ce type de longueurs, le char fixe est préférable.

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

Discussions similaires

  1. [AC-2007] Insertion d'une colonne vide dans une requte ACCESS
    Par FramanKalima dans le forum Access
    Réponses: 2
    Dernier message: 14/08/2015, 12h50
  2. [AC-2003] Erreur de syntaxe dans une requête insert into.union all
    Par ostrich95 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/04/2014, 15h03
  3. Erreur dans une requête d'insertion
    Par bboy_lil_mak dans le forum Bases de données
    Réponses: 2
    Dernier message: 29/08/2013, 12h38
  4. Erreur dans une fonction d'insertion
    Par cisco.nat dans le forum Langage SQL
    Réponses: 7
    Dernier message: 28/07/2013, 17h30
  5. Erreur dans une requête d'insertion
    Par monpseudonom dans le forum PL/SQL
    Réponses: 7
    Dernier message: 17/11/2008, 16h50

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