Dba related child tables

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Domaine Administration (contraintes, dépendances)
Voir aussi Dba table info · Dba tables all

Dba related child tables liste toutes les tables « enfants » liées à une table « parent » donnée par une contrainte de clé étrangère. Demande le propriétaire et le nom de la table parent, puis rapproche les contraintes PRIMARY KEY/UNIQUE de cette table avec les contraintes REFERENTIAL (clés étrangères) qui pointent vers elles. Utile avant une suppression ou une purge de données, pour repérer les tables impactées par les contraintes d'intégrité référentielle.

Script

-- Liste les tables enfants (liées par clé étrangère) d'une table parent donnée.

SET ECHO      OFF
SET FEEDBACK  6
SET HEADING   ON
SET LINESIZE  180
SET PAGESIZE  50000
SET TRIMSPOOL ON
SET VERIFY    OFF

CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES

PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | All child tables related to a parent table name                        |
PROMPT +------------------------------------------------------------------------+
PROMPT

ACCEPT table_owner PROMPT 'Enter parent table owner : '
ACCEPT table_name  PROMPT 'Enter parent table name  : '

SELECT
    p.table_name  parent_table_name
  , c.table_name  child_table
FROM
    dba_constraints  p
  , dba_constraints  c
WHERE
    (p.constraint_type = 'P' OR p.constraint_type = 'U')
  AND
    c.constraint_type = 'R'
  AND
    p.constraint_name = c.r_constraint_name
  AND
    p.owner = UPPER('&table_owner')
  AND
    p.table_name = UPPER('&table_name')
ORDER BY 2
/

Colonnes / sortie

  • PARENT_TABLE_NAME — la table parent interrogée (répétée sur chaque ligne).
  • CHILD_TABLE — chaque table enfant qui référence la table parent via une clé étrangère.

Le script ne remonte que le nom de la table enfant, pas le nom de la contrainte ni les colonnes concernées. Pour aller plus loin, il suffit d'ajouter c.constraint_name et de joindre dba_cons_columns sur c.owner/c.constraint_name pour obtenir le détail colonne par colonne.

Voir aussi

  • Dba table info — détail complet d'une table donnée, y compris ses contraintes
  • Dba tables all — inventaire de toutes les tables de la base