it-swarm-id.com

Query a Table's Foreign Key relationship

Untuk tabel yang diberikan 'foo', saya perlu kueri untuk menghasilkan seperangkat tabel yang memiliki kunci asing yang mengarah ke foo. Saya menggunakan Oracle 10G.

22
Mark Roddy

Ini seharusnya bekerja (atau sesuatu yang dekat):

select table_name
from all_constraints
where constraint_type='R'
and r_constraint_name in 
  (select constraint_name
  from all_constraints
  where constraint_type in ('P','U')
  and table_name='<your table here>'); 
41
Mike Monette

Pernyataan berikut harus memberi anak-anak dan semua keturunan mereka. Saya telah mengujinya pada database Oracle 10.

SELECT  level, main.table_name  parent,
    link.table_name child
FROM    user_constraints main, user_constraints link    
WHERE   main.constraint_type    IN ('P', 'U')
AND link.r_constraint_name  = main.constraint_name
START WITH main.table_name  LIKE UPPER('&&table_name')
CONNECT BY main.table_name = PRIOR link.table_name
ORDER BY level, main.table_name, link.table_name
4
richard.j.lewis

Berikut cara mengambil kueri Mike satu langkah lebih jauh untuk mendapatkan nama kolom dari nama kendala:

select * from user_cons_columns
where constraint_name in (
  select constraint_name 
  from all_constraints
  where constraint_type='R'
  and r_constraint_name in 
    (select constraint_name
    from all_constraints
    where constraint_type in ('P','U')
    and table_name='<your table name here>'));
2
matt1616

tautan ke Dokumentasi Online Database Oracle

Anda mungkin ingin menjelajahi tampilan Kamus Data . Mereka memiliki awalan:

  • Pengguna
  • Semua
  • DBA

mencicipi:

select * from dictionary where table_name like 'ALL%' 

Melanjutkan contoh Mike, Anda mungkin ingin membuat skrip untuk mengaktifkan/menonaktifkan kendala. Saya hanya memodifikasi 'pilih' di baris pertama.

select  'alter table ' || TABLE_NAME || ' disable constraint ' || CONSTRAINT_NAME || ';'
from all_constraints
where constraint_type='R'
and r_constraint_name in 
  (select constraint_name
  from all_constraints
  where constraint_type in ('P','U')
  and table_name='<your table here>');
1
Tony R

Saya tahu ini agak terlambat untuk menjawab tetapi biarkan saya tetap menjawab, beberapa jawaban di atas cukup rumit maka ini adalah langkah yang jauh lebih sederhana.

. c ON a.owner = c.owner AND a.constraint_name = c.constraint_name 
 bergabung dengan all_cons_columns b pada c.owner = b.owner dan c.r_constraint_name = b.constraint_name 
 WHERE c.constraint_type = 'R' 
 AND a.table_name = 'nama tabel Anda'` 
1
arvnq

Unduh Oracle Reference Guide for 10G yang menjelaskan tabel kamus data.

Jawaban di atas bagus tetapi periksa tabel lain yang mungkin berhubungan dengan kendala.

SELECT * FROM DICT WHERE TABLE_NAME LIKE '%CONS%';

Akhirnya, dapatkan alat seperti Toad atau SQL Developer yang memungkinkan Anda untuk menelusuri hal-hal ini di UI, Anda perlu belajar menggunakan tabel tetapi Anda juga harus menggunakan UI.

0
Ethan Post
select distinct table_name, constraint_name, column_name, r_table_name, position, constraint_type 
from (
    SELECT uc.table_name, 
    uc.constraint_name, 
    cols.column_name, 
    (select table_name from user_constraints where constraint_name = uc.r_constraint_name) 
        r_table_name,
    (select column_name from user_cons_columns where constraint_name = uc.r_constraint_name and position = cols.position) 
        r_column_name,
    cols.position,
    uc.constraint_type
    FROM user_constraints uc
    inner join user_cons_columns cols on uc.constraint_name = cols.constraint_name 
    where constraint_type != 'C'
) 
start with table_name = '&&tableName' and column_name = '&&columnName'  
connect by nocycle 
prior table_name = r_table_name 
and prior column_name = r_column_name;   
0
Abu Turab