Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2007, 10h39   #1
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Par défaut ASE 12.5 creation FK à effet retroactif

Bonjour,

Table A pkA clef primaire
Table B fkBA clef etrangere pointe sur pkA

Les 2 tables sont remplies avant de créer les contraintes.
Existe -t-il une option qui permette la retroactivité de la fkBA car par défault la contrainte ne s'applique que pour les nouvelles valeurs ( inserées ou updatées )

D'avance merci.
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 11h47   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Si mes souvenirs sont bons un "ALTER TABLE ADD CONSTRAINT FOREIGN KEY ..." ne va s'appliquer qu'aux nouvelles modifications de la table, donc cela devrait convenir.

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 11h57   #3
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Citation:
Envoyé par mpeppler
Si mes souvenirs sont bons un "ALTER TABLE ADD CONSTRAINT FOREIGN KEY ..." ne va s'appliquer qu'aux nouvelles modifications de la table, donc cela devrait convenir.

Michael
Mais justement, je voudrais que la contrainte soit vérifiée aussi pou rles données déjà existantes !
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 13h26   #4
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Oops - désolé, j'ai mal lu la question.

Non, je ne pense pas qu'il y ai d'option qui permette de vérifier une contrainte de type FK après coup. On peut évidemment écrire une requête qui fait le check...

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 16h05   #5
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Citation:
Envoyé par mpeppler
Oops - désolé, j'ai mal lu la question.

Non, je ne pense pas qu'il y ai d'option qui permette de vérifier une contrainte de type FK après coup. On peut évidemment écrire une requête qui fait le check...

Michael
Pensez vous qu'une tentative de delete dans la table A suffit pour savoir si il n'y a pas de contrainte active sachant qu'il n'y a pas de trigger ?
ou autrement demandé, n'y a t-il pas de risque de delete en cascade sur sybase 12.5 ?
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 18h02   #6
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Sybase n'a pas de delete cascade - si le delete invalide la FK le delete est en principe inhibé.

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2007, 13h54   #7
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Citation:
Envoyé par mpeppler
Sybase n'a pas de delete cascade - si le delete invalide la FK le delete est en principe inhibé.

Michael
Parfait, Quelqu'un connait il sous SYB 12.5 une alternative au curseur pour deleter les lignes qui peuvent l'etre et laisser en place celles qui poseront un probleme à cause d'une clé étrangere ?
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 07h49   #8
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Quelque chose du genre devrait marcher:

Code :
1
2
3
 
DELETE FROM tablea
WHERE NOT EXISTS (SELECT * FROM tableb WHERE tableb.pk = tablea.fk)
Cela ne sera pas très rapide, mais ce n'est pas non plus une requête à faire tous les jours :-)

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 17h03   #9
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
En fait j'ai de tres grosses tables filles (Table B fkBA clef etrangere pointe sur pkA)
et peu de suppressions dans ma table mere (Table A pkA clef primaire)

Je vais tester les suppressions une à une via un curseur sur les enregistrement de A que je sais devoir effacer si c'est possible.

Cependant J'aimerais dans ces cas (pour mes log) filtrer les messages d'erreurs sur les violations de contraintes et signifier grace à @@error!=0 que la ligne n'a pas été supprimée.

En gros, y a-til un moyen d'éviter la sortie de :

Server Message: Number 547, Severity 16
Server 'mon_serveur', Line 1:
Dependent foreign key constraint violation in a referential integrity constraint. dbname = 'ma_base', table name = 'ma_table, constraint name = 'ma_FK'.
Server Message: Number 3621, Severity 10
Server 'mon_serveur', Line 1:
Command has been aborted.

Je n'ai rien trouvé de probant avec sp_altermessage et sp_bindmessage ...
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2007, 09h01   #10
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Citation:
Envoyé par Jean.Cri1
En gros, y a-til un moyen d'éviter la sortie de :

Server Message: Number 547, Severity 16
Server 'mon_serveur', Line 1:
Dependent foreign key constraint violation in a referential integrity constraint. dbname = 'ma_base', table name = 'ma_table, constraint name = 'ma_FK'.
Server Message: Number 3621, Severity 10
Server 'mon_serveur', Line 1:
Command has been aborted.
Je ne pense pas que ce soit possible au niveau de l'instance.
Par contre c'est évidemment possible dans le client si celui-ci permet la customisation du "error handler" (p.ex. client perl utilisant DBD::Sybase).

Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2007, 10h30   #11
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Merci.
Je clos
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h03.


 
 
 
 
Partenaires

Hébergement Web