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

Résolu
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. Modérateur
    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
    1. 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 :)
      1. 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.
    2. Modérateur
      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)
      1. 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)
        );
    3. Modérateur
      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)