Salut tout le monde,
j'ai un programme depuis laquelle je dois insérer des nouvelles informations. C'est pour ça je dois supprimer les clés étrangères puis les créer de nouveau.
C'est pour ça j'ai mis en place une fonction pour stocker les commandes de créations des clé étrangères dans une table pour les utiliser ultérieurement.
je me suis référé à ce lien http://www.alberton.info/firebird_sql_meta_info.html
mais je n'ai pas eu satisfaction.
C'est pour cela j'ai essayé de découper mon raisonnement en sous requêtes :
Je suis parvenu à avoir la liste des FK avec
1 2 3 4 5 6 7
| SELECT distinct rc.RDB$CONSTRAINT_NAME AS fk_name,
refc.RDB$DELETE_RULE AS on_del,
refc.RDB$UPDATE_RULE AS on_upd
FROM RDB$RELATION_CONSTRAINTS rc
LEFT JOIN RDB$REF_CONSTRAINTS refc ON rc.RDB$CONSTRAINT_NAME = refc.RDB$CONSTRAINT_NAME
WHERE rc.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY'
AND rc.RDB$RELATION_NAME = 'PRE_PRESENTATION' |
et puis la liste des colonnes surlesquels s'applique cette FK avec
select RDB$FIELD_NAME from RDB$INDEX_SEGMENTS where RDB$INDEX_NAME = 'FK1_PRE_PRESENTATION' order by RDB$FIELD_POSITION
Mais je n'ai pas pu dégager la liste des tables et colonnes de référence. J'ai utilisé cette requête
1 2 3 4 5 6 7 8 9 10 11 12
| SELECT distinct d2.RDB$DEPENDED_ON_NAME AS ref_tab, d1.RDB$FIELD_NAME
FROM RDB$RELATION_CONSTRAINTS rc
inner JOIN RDB$INDEX_SEGMENTS seg ON seg.RDB$INDEX_NAME = rc.RDB$CONSTRAINT_NAME
inner JOIN RDB$DEPENDENCIES d1 ON d1.RDB$DEPENDED_ON_NAME = rc.RDB$RELATION_NAME
inner JOIN RDB$DEPENDENCIES d2 ON d1.RDB$DEPENDENT_NAME = d2.RDB$DEPENDENT_NAME
WHERE rc.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY'
and d1.RDB$FIELD_NAME = seg.RDB$FIELD_NAME
AND d1.RDB$DEPENDED_ON_NAME <> d2.RDB$DEPENDED_ON_NAME
AND d1.RDB$FIELD_NAME <> d2.RDB$FIELD_NAME
AND rc.RDB$RELATION_NAME = 'PRE_PRESENTATION'
and seg.RDB$INDEX_NAME = 'FK1_PRE_PRESENTATION'
and d1.RDB$FIELD_NAME = 'PRE_SP_CODE_FK' |
mais il m'affiche toutes les dépendances de ma table source.
Est ce que quelqu'un pourrait me corriger pour avoir les bons résultats.
Merci d'avance pour votre collaboration.
Cordialement
Partager