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 :

Mise à jour du libellé d'une table en fonction du libellé de la table parente


Sujet :

SQL Oracle

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut Mise à jour du libellé d'une table en fonction du libellé de la table parente
    Bonjour,

    J'ai une table des magasins et une table des dépôts. Chaque magasin pointe sur un seul et unique dépôt.

    Je souhaite mettre à jour le libellé du magasin et qu'il prenne comme valeur les 3 premiers caractères du dépôt puis le caractère '-' puis le libellé du magasin.

    Je ne vois pas comment faire.

    Julien.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Comme ça vous violez un des principes fondamental de la 1NF : l'atomicité des données.

    Ne touchez pas à vos libellés de magasin, et écrivez une vue qui vous présentera ce que vous évoquez.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut
    Le libellé du magasin n'est pas une clé. C'est pour cela que je veux faire une mise à jour.

    Il y a plusieurs libellés identiques sur les magasins pour des dépôts différents.

    La clé de la table magasin est id_magasin, celle du dépôt est id_depot.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Je n'ai pas parlé de clef.
    Une colonne doit contenir une information unitaire : votre nom de magasin ne dépend pas physiquement du nom du dépôt.
    Si le dépôt change de nom, vous devrez changer le nom du magasin. On est bien en pur viol de la 1NF.

    Ces informations doivent rester physiquement dissociées.
    Maintenant, je ne remets pas en cause le besoin, c'est pour cela que je vous propose une vue avec une simple jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    With Depot (id_depot, lb_depot) as
    (
    select 1, 'Super Depot' from dual union all
    select 2, 'Mega Depot'  from dual union all
    select 3, 'Giga Depot'  from dual
    )
      ,  Magasin (id_magasin, lb_magasin, id_depot) as
    (
    select 1, 'Grand Magasin', 1 from dual union all
    select 2, 'Petit Magasin', 2 from dual union all
    select 3, 'Grand Magasin', 3 from dual
    )
    select m.id_magasin
         , substr(d.lb_depot, 1, 3) || '-' || m.lb_magasin as lb_magasin
         , m.id_depot
      from Magasin m
      join Depot   d ON d.id_depot = m.id_depot;
     
    ID_MAGASIN LB_MAGASIN        ID_DEPOT
    ---------- ----------------- --------
             1 Sup-Grand Magasin        1
             2 Meg-Petit Magasin        2
             3 Gig-Grand Magasin        3

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut
    Je partage complètement votra avis.

    Je travaille sur un ERP à partir duquel je dois extraire les références articles à inventorier. Le critère de sélection que je souhaite utiliser sur l'ERP est le magasin (il s'agit d'un ensemble de sélection ne pouvant provenir d'une vue).

    Dans la liste des magasins, actuellement, j'ai quelque chose comme:

    Magasin 1
    Magasin 1
    Magasin 1
    Magasin 1
    Magasin 1
    Magasin 1

    Je veux mettre DEPA-Magasin 1 dans le libellé du magasin.

    En réalité, le nom du dépôt ne bougera probablement pas.
    Je vais me faire confirmer cela par la direction de l'entreprise.

    Je ne connais pas la requête sql permettant de mettre à jour la table magasin.

    Julien.

  6. #6
    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,

    Fais ton update avec la table qui donne le libellé du dépôt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE magasin a
    SET libelle = (SELECT libelle FROM depot b ON a.id_depot = b.id_depot)
                      || ' - ' || libelle
    Sinon je suis bien entendu d'accord avec Waldar, mais on ne peut probablement pas changer le code du progiciel... tout le drame de ces outils génériques qui doivent tout faire pour tout le monde

Discussions similaires

  1. Mise à jour des champs d'une table
    Par soso78 dans le forum Access
    Réponses: 2
    Dernier message: 14/12/2006, 15h57
  2. Réponses: 2
    Dernier message: 07/06/2006, 14h13
  3. Module de mise à jour des champs d'une table
    Par kikaillo dans le forum Access
    Réponses: 14
    Dernier message: 18/04/2006, 09h42
  4. Réponses: 6
    Dernier message: 07/02/2006, 14h44
  5. Vue non mise à jour après modification d'une table
    Par cybernet35 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/01/2006, 13h54

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