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

SQL Oracle Discussion :

Modifier PrimaryKey dans un Update


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut Modifier PrimaryKey dans un Update
    Bonjour,

    On m'a demandé de faire une requête où il faut modifer deux trois valeurs dans une table avec un UPDATE, la clé primaire est une concatenation de plusieurs champs de cette table et plusieurs valeurs appartenant à ceschamps doivent être modifer mais Oracle renvoi un message d'erreur comme quoi la requête s'est mal terminé, est ce que quelqu'un a une idée de comment faire ?

    Merci,

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Sans la requête, la description de vos tables, ni aucune donnée c'est très simple de vous aider.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Voici l'une des requêtes testé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE MaTable
    SET MonChampCléPrimaire = 'untruc'
    SET UnChamp = 'unautretruc'
    WHERE Name = 'Moi';

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Ce n'est pas la bonne syntaxe, il faudrait l'écrire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE MaTable
    SET MonChampCléPrimaire = 'untruc',
        UnChamp = 'unautretruc'
    WHERE Name = 'Moi';
    Par contre, c'est une extrèmement mauvaise idée d'avoir une clef primaire composée ainsi.

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Par contre, c'est une extrèmement mauvaise idée d'avoir une clef primaire composée ainsi.
    A oui, là par contre c'est au type qui a fait le mcd qu'il faut en parler, de toute façon lorsque l'on passe du MCD au MLD il y a bien des associations entres entité qui deviennent des tables avec comme clé primaire la concatenation des clé primaires des entités quel relie...

    Je sais pas si je me fait comprendre, enfin merci je vais déjà tester sa se serait bête d'être coincé pour une erreur bête comme sa

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Citation Envoyé par John Easy Voir le message
    A oui, là par contre c'est au type qui a fait le mcd qu'il faut en parler, de toute façon lorsque l'on passe du MCD au MLD il y a bien des associations entres entité qui deviennent des tables avec comme clé primaire la concatenation des clé primaires des entités quel relie..
    Euh non, quand on passe du MCD au MLD, une clef primaire composite se créé sur plusieurs colonnes, mais certainement pas sur de la concaténation...

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Et bien on peut appeler sa comme on veux mais une clé primaire peut être composée d'un ou de plusieurs champs de la table, dans mon cas c'est plusieurs...

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Une clef primaire composée de plusieurs clefs étrangère ne pose aucun problème (dans la relation adéquate (1,n)).
    C'est une clef du type PK = (col1, col2, col3).

    Une clef concaténée revient à écrire bout à bout toutes les clefs étrangères dans une seule.
    Et là c'est potentiellement faux (si on ne gère pas un séparateur), ça ne suit pas la 3NF (donnée non-atomique), et c'est compliqué à utiliser.
    Ce serait une clef du type PK = col1 || col2 || col3.

    Si vous êtes dans le premier cas, il n'y a pas de soucis dans votre modélisation, c'était juste un problème de vocabulaire.

    Citation Envoyé par John Easy Voir le message
    Et bien on peut appeler sa comme on veux mais
    Non justement, une langue utilise des mots qui ont une signification.
    Si je me mets à vous appeler Bob, vous n'allez jamais comprendre que je m'adresse à vous.

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Ok, j'ai pas du tout envie de me lancer dans un dialogue de sourd, et je n'ai aucune raison de mettre en doute les personnes qui m'on aidé à apprendre le merise-MCD-SQL, par contre c'est pas sa qui va faire avancer le chmilblik car je suis toujours coincé dans mon problème.

    Boby.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Donnez nous votre requête actuelle, la structure de vos tables et une explication de ce que vous voulez faire précisément, nous pourrons sans doute vous aider d'avantage.

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Et bien m'a requête actuelle la plus "logique" est celle qu'a proposé Waldar :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE MaTable
    SET MonChampCléPrimaire = 'untruc',
        UnChamp = 'unautretruc'
    WHERE Name = 'Moi';
    La table en question a une clé primaire composé, pour parler comme Waldar de plusieurs clés étrangères cet table est le résultat d'une association entre plusieurs péripherique informatique et ordinateurs de travail, un utilisateur a changé de poste de travail donc la requête va servir à allouer d'autre periph à cet personne, vu que la seul chose compréhensible dans la table est le nom de la personne qui à changé de poste il est plus simple de la présenter comme ça. La c'est très claire...

    Maintenant la structure est comme ceci: 5 colonnes dont 3 constitu la clé primaire, la requête va affecter l'une des 3 colonnes de la clé primaire et ne devrait modifier que deux lignes sur la centaines éxistante dans cette table, en gros il y a deux champ x et y qui vont être remplacé par "untruc" et "unautretruc" la ou le champ "nom" est égale à "Moi".

    Et Oracle me donne comme erreur que la requête ne s'est pas terminé correctement, en gros aucune précision.

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    La requête semble pourtant correcte.
    Sur quelle version d'Oracle travaillez-vous? Avez-vous lancé cette requête à partir d'SQL-Plus? Vos colonnes sont bien de type chaîne de caractères?

  13. #13
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par John Easy Voir le message
    Oracle renvoi un message d'erreur comme quoi la requête s'est mal terminé
    Règle de base : quand on a une erreur, il faut la fournir rigoureusement telle qu'elle apparaît, c'est à dire avec son code numérique et son libellé.

  14. #14
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 29
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    -les colonnes en question sont de type NCHAR
    -a version de Oracle est la 10g
    -la requête est lancé à partir de TOAD
    -l'erreur est: ORA-00933 Command not properly ended

  15. #15
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Il faut également la structure de votre table et la vraie requête.

Discussions similaires

  1. [MySQL] modifier un chaine dans un UPDATE
    Par kimcharlene dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/09/2007, 03h01
  2. REPLACE dans un UPDATE
    Par outdial dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/09/2004, 11h00
  3. [Débutant][PS] modifier un insert en update
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 19/05/2004, 16h33
  4. Une ch'tite bizarrerie dans les Updates de SQL Server
    Par Wakko2k dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 08/04/2004, 14h14
  5. GROUP BY et HAVING dans un UPDATE
    Par MashiMaro dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2003, 08h03

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