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 :

Clé étrangère concaténée


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut Clé étrangère concaténée
    Bonjour,

    J'aimerais créer une table, jusque là tout va bien . L'un de mes nouveaux champs REF_TRP doit obligatoirement se trouver dans une autre table (donc clé étrangère) mais le hic, c'est que ce nouveau champ n'est pas égal à un champ mais à la concaténation de deux champs.

    En gros pour être un peu plus claire : REF_TRP IN SELECT CHAMP1 || CHAMP2 FROM MA_TABLE

    Et là... bah... .

    J'ai essayé de faire un CHECK dans la création de ma table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REF_TRP VARCHAR2(10) NOT NULL CHECK (VALUE IN (SELECT CHAMP1 || CHAMP2 FROM MA_TABLE WHERE NUMPOS = 1))
    mais j'ai le message : ORA-02251: sous-interrogation non autorisée ici

    Du coup j'aimerais bien passer par une clé étrangère mais je ne sais pas du tout comment faire, dans le cas ou c'est possible bien sur.

    Avez-vous une idée ?

  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
    Il faut que vos colonnes de la clef étrangères soit les mêmes que les colonnes de la clef primaire / unique référencée.

    Vous devriez utilisez les deux colonnes dans votre table fille, et gérer la concaténation dans une vue.

    En modélisation, l'atomicité des données fait partie de la 1NF, il faut toujours la respecter !

  3. #3
    Membre averti
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut
    J'ai essayé de passer par une vue mais j'obtiens le message suivant :

    ORA-02270: pas de correspondance de clé primaire ou unique pour cette liste de colonnes

  4. #4
    Membre éclairé Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Par défaut
    Bonjour,

    J'ai essayé avec un trigger.
    Soient les tables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create table jbmliga ( joueur varchar2(30), club varchar2(20), ville varchar2(30) )
     
    create table jbmbeaubut( datebut varchar2(30), clubville varchar2(60) )
     
    alter table jbmliga add constraint pk_liga primary key ( joueur )
    La colonne clubville est la concaténation de club et ville.

    J'ai créé ce trigger:
    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
    create or replace trigger jbm_trg_foreignkey
    before update or insert on jbmbeaubut
    for each row
    declare
    lv_ville jbmliga.ville%type;
    lv_club  jbmliga.club%type;
    begin
      select ville, club
      into lv_ville, lv_club
      from jbmliga
      where  club || ville = :new.clubville;
    exception
      when no_data_found then
         raise_application_error ( num => -20001, msg => 'clubville  n existe pas' );
    end;
    J'ai essayé dans Oracle Forms, effectivement si je rentre 'Marseille' en correspondance avec 'BARCABARCELONE', Oracle refuse d'insérer la ligne.

    à bien tester en dev.
    Astuce pour avoir les erreurs de compil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from user_errors

Discussions similaires

  1. [Script]prob de clés étrangères
    Par Seb7 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 08/07/2003, 17h37
  2. Char(x) -> chaine concaténée d'espaces ?
    Par rgz dans le forum Débuter
    Réponses: 7
    Dernier message: 27/06/2003, 11h59
  3. Concaténation vertical ???
    Par loaded dans le forum Langage SQL
    Réponses: 10
    Dernier message: 07/05/2003, 15h44
  4. Concaténer TStrings
    Par Tuxxy dans le forum Composants VCL
    Réponses: 8
    Dernier message: 07/03/2003, 12h30
  5. Concaténation de String et Integer
    Par Ingham dans le forum Langage
    Réponses: 5
    Dernier message: 21/01/2003, 17h26

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