Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
872 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  oracle foreign key

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

oracle foreign key

n°2025936
puisquetur​epondspas
Posté le 29-09-2010 à 14:49:13  profilanswer
 

J'essaie :
ALTER TABLE TREGLT
ADD CONSTRAINT CD_BUR_PAYEUR_FK
  FOREIGN KEY (CD_BUR_PAYEUR)
  REFERENCES TBUR_PAYEUR (CD_BUR_PAYEUR);
 
ORA-02270: pas de correspondance de clé primaire ou unique pour cette liste de colonnes  :??:  
 
et j'ai en base
 
CREATE TABLE TBUR_PAYEUR
(
  TBUR_PAYEUR_ID  NUMBER(11),
  CD_BUR_PAYEUR   VARCHAR2(8 BYTE)    
  LIB_AERO        VARCHAR2(64 BYTE)      
  LIB_APPLI       VARCHAR2(64 BYTE)  
  TIME_STAMP      DATE            
)
 
CREATE UNIQUE INDEX IDX_CD_BUR_PAYEUR ON TBUR_PAYEUR
(CD_BUR_PAYEUR)
 
CREATE UNIQUE INDEX TBUR_PAYEUR_PK ON TBUR_PAYEUR
(TBUR_PAYEUR_ID)
 
ALTER TABLE TBUR_PAYEUR ADD (
  CONSTRAINT TBUR_PAYEUR_PK
 PRIMARY KEY
 (TBUR_PAYEUR_ID)
 
 
 

mood
Publicité
Posté le 29-09-2010 à 14:49:13  profilanswer
 

n°2025939
pataluc
Posté le 29-09-2010 à 14:55:08  profilanswer
 

euh... oui, et?

n°2025946
puisquetur​epondspas
Posté le 29-09-2010 à 15:24:46  profilanswer
 

"pas de correspondance de clé primaire ou unique pour cette liste de colonnes"' pourtant CREATE UNIQUE INDEX IDX_CD_BUR_PAYEUR ON TBUR_PAYEUR
(CD_BUR_PAYEUR)  
c'est bien une clé unique non???

n°2025963
pataluc
Posté le 29-09-2010 à 16:18:44  profilanswer
 

ben sauf si j'me goure, non c'est un index... :spamafote:

n°2025964
olivthill
Posté le 29-09-2010 à 16:21:29  profilanswer
 

Est-ce que la table TREGLT  contient bien un champ nommé CD_BUR_PAYEUR ?
Est-ce qu'il ne manque pas des virgules et des point virgules dans le code de création de la table TBUR_PAYEUR  ?
 
De toutes façons, le problème est que la clé étrangère n'est pas une clé primaire.
Voir http://www.techonthenet.com/oracle/errors/ora02270.php
En plus, cela ne respecte pas les règles de normalisation.
 
N.B. Au lieu de créer des contraintes dans la base, il vaut mieux mettre des contrôles dans les programmes d'insertion ou de mise à jour de données. Cela présente deux avantages :
- Le message d'erreur est affiché au bon endroit par le programme de contrôle, sous la bonne forme, avec une suite logique, au lieu de faire planter le programme.
- On peut charger des données en masse qui, d'une manière temporaire, ne sont pas cohérentes sans que cela ne soit bloquant. Charger des données en masse est souvent utile pour une initialisation de base, pour une récupération d'une sauvegarde, ou pour des tests.
 
 
 
 
 

n°2025974
couak
Posté le 29-09-2010 à 16:57:49  profilanswer
 

Justement moi je dis l'inverse : une contrainte gérée par la base sera mieux faite par la base elle-même
Pour l'insertion en masse il y a des utilitaires fournis pour ca (notamment sqlldr) et les ETL s'appuient également la-dessus. Il suffit de jouer avec les options pour régler le curseur entre la verbosité et les performances

n°2025985
skeye
Posté le 29-09-2010 à 17:16:56  profilanswer
 

olivthill a écrit :

N.B. Au lieu de créer des contraintes dans la base, il vaut mieux mettre des contrôles dans les programmes d'insertion ou de mise à jour de données.


Ah ben oui bonne idée, comme ça au moindre bug dans ton programme qui passe en prod' sans le voir tu risques de perdre la cohérence des données.[:dawak]
Au-secours.[:pingouino]


---------------
Can't buy what I want because it's free -
n°2026066
puisquetur​epondspas
Posté le 30-09-2010 à 09:45:11  profilanswer
 

oui merci de votre aide d'accord c'est un index et l'erreur est bien "clé", il faut ajouter une constrainte
ALTER TABLE GESTION_DB.tbur_payeur ADD CONSTRAINT unique_cd_bur_payeur UNIQUE (cd_bur_payeur)
(cd_bur_payeur est bien dans la table tbur_payeur.)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  oracle foreign key

 

Sujets relatifs
[ORACLE] Index spatial avec DOMIDX_OPSTATUS='FAILED'[ORACLE] configurer nom serveur DB pour Discoverer web
[Oracle]Mise à jour de clé étrangère aléatoireUrgent SQL vers Oracle
Oracle 10g vers Oracle 10g via SSIS 2005oracle utiliser la même table pour lire ....
[Oracle] Temps d'execution de requete tres long par rapport au .NETExecuter fonction oracle et récupérer résultat depuis perl (DBI)
[Oracle 10G] Données vers fichier Excel[Oracle] Faire une foreign key sur une reference ?
Plus de sujets relatifs à : oracle foreign key


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR