[SQL] Deux référence dans une seule table

Résolu
khaoula.85 -  
 khaoula.85 -
Bonjour,

Je souhaite créer une table qui comporte deux références sur deux autres tables.
Ce que j'ai écrit est le suivant :

prompt creation table reparation_piece
create table reparation_piece
(
num_reparation varchar2(10),
ref_piece varchar2(10),
quantite number(10,3),
constraint pk_reparation_piece primary key (num_reparation, ref_piece),
constraint fk_reparation_piece foreign key (num_reparation, ref_piece)
references piece (ref_piece)
references reparation (num_reparation)
);


Et ce que SQL*Plus Worksheet m'affice est cela :

creation table reparation_piece
references reparation (num_reparation)
*
ERREUR à la ligne 9 :
ORA-02256: le nombre de colonnes de référence doit correspondre au nombre de
colonnes référencées


Quelqu'un pourrait me corriger cette erreur ?

Merci de vos réponses :)

5 réponses

  1. jee pee Messages postés 31903 Date d'inscription   Statut Modérateur Dernière intervention   9 985
     
    Bonjour, Toujours dans le SQL Khaoula ?

    il faut creer 2 FK puisqu'elles font reference à 2 tables differentes

    create table reparation_piece
    (
    num_reparation varchar2(10),
    ref_piece varchar2(10),
    quantite number(10,3),
    constraint pk_reparation_piece primary key (num_reparation, ref_piece),
    constraint fk_num_reparation foreign key (num_reparation)
    references reparation (num_reparation),
    constraint fk_ref_piece foreign key (ref_piece)
    references piece (ref_piece)
    );

    cdt
    0
  2. khaoula.85
     
    Bonjour Mon Professeur ;)

    Beh non, j'ai avancé quand même, j'ai appris le PL/SQL, lalala :)

    Je révise pour mon examen, et j'ai eu cette petite contrainte disons..

    Merci de ta réponse et passe une agréable après-midi :)
    0
    1. khaoula.85
       
      Bonsoir,

      Encore un petit problème quand il s'agit des références sur une clé étrangère, pourtant, j'ai ré-écris mes deux lignes comme tu as indiqué :

      prompt creation table preparation
      create table preparation
      (
      ref_preparation varchar2(10),
      code_produit_composant varchar2(10),
      code_produit_compose varchar2(10),
      quantite number(10,3),
      constraint pk_preparation primary key (ref_preparation),
      constraint fk_preparation foreign key (code_produit_composant)
      references produit (code_produit_composant),
      constraint fk_preparation foreign key (code_produit_compose)
      references produit (code_produit_compose)
      );


      P.S. Ce n'est pas la même table ;)

      Merci encore une fois et bonne soirée.
      0
  3. jee pee Messages postés 31903 Date d'inscription   Statut Modérateur Dernière intervention   9 985
     
    salut,

    ya quelque chose qui cloche, soit les 2 champs sont dans la même table alors c'est :

    constraint fk_produit foreign key (code_produit_composant,code_produit_compose)
    references produit (code_produit_composant,code_produit_compose)

    soit les champs ne sont pas la même table alors :

    constraint fk_produit foreign key (code_produit_composant)
    references produit (code_produit_composant),

    constraint fk_AUTRETABLE foreign key (code_produit_compose)
    references AUTRETABLE (code_produit_compose)
    0
    1. khaoula.85
       
      Merci de ta réponse jee pee.

      Au fait c'est un autre exercice à part. J'ai deux deux tables en tout : produit et preparation. J'ai pas eu de surprises lrs de la création de la table produit :

      prompt creation table preparation
      create table produit
      (
      code_produit varchar2(10),
      designation varchar2(40),
      prix_unitaire number(18,8),
      un varchar2(2)
      constraint pk_produit primary key (code_produit)
      );


      j'ai deux références de clés étrangères vers la table produit, d'où :

      prompt creation table preparation
      create table preparation
      (
      ref_preparation varchar2(10),
      code_produit_composant varchar2(10),
      code_produit_compose varchar2(10),
      quantite number(10,3),
      constraint pk_preparation primary key (ref_preparation),
      constraint fk_preparation foreign key (code_produit_composant)
      references produit (code_produit_composant),
      constraint fk_preparation foreign key (code_produit_compose)
      references produit (code_produit_compose)
      );
      0
  4. jee pee Messages postés 31903 Date d'inscription   Statut Modérateur Dernière intervention   9 985
     
    alors c'est ta ligne references qui ne va pas, car si code_produit_composant et code_produit_compose sont tous les 2 des code_produit de la table produit,

    la syntaxe c'est references TABLE1 (NOM_DU_CHAMP_TABLE1)

    donc

    constraint fk_preparation_composant foreign key (code_produit_composant)
    references produit (code_produit),
    constraint fk_preparation_compose foreign key (code_produit_compose)
    references produit (code_produit)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. khaoula.85
     
    Bonjour,
    Merci encore une fois.
    Bon week end :)
    0