テーブルでは外部キーに基づいた階層が作成されているとします。たとえば、T1はT2を参照し、T2はT3を参照します。
この場合、階層クエリが必要です。助けを借りて、今
TABLE_NAME REFERENCED_TABLE_NAME
---------- -------------------------
TTT22 TTT1
TTT211 TTT21
TTT21 TTT1
TTT2111 TTT211
TTT2112 TTT211
とを:
CREATE TABLE ttt1(
ACCOUNT_ID int primary key,
somecolumn varchar2(100)
);
CREATE TABLE ttt21(
id int primary key,
ACCOUNT_ID int referencing ttt1(ACCOUNT_ID),
somecolumn varchar2(100)
);
CREATE TABLE ttt22(
id int primary key,
ACCOUNT_ID int referencing ttt1(ACCOUNT_ID),
somecolumn varchar2(100)
);
CREATE TABLE ttt211(
id int primary key,
ACCOUNT_ID int referencing ttt21(id),
somecolumn varchar2(100)
);
CREATE TABLE ttt2111(
id int primary key,
ACCOUNT_ID int referencing ttt211(id),
somecolumn varchar2(100)
);
CREATE TABLE ttt2112(
id int primary key,
ACCOUNT_ID int referencing ttt211(id),
somecolumn varchar2(100)
);
ビューが得られます。この場合、例えば
select c.table_name, uc.table_name as referenced_table_name
from user_constraints c
join USER_CONS_columns uc ON c.r_constraint_name = uc.constraint_name
where c.constraint_type = 'R'
:まず、テーブル間の参照を表示するビューを作成
このビューの階層クエリを作成することができます。
まずあなたがレベル2でというようにして、レベル1ですべてのテーブルを処理する必要がある -
LEVEL REFERENCED_TABLE_NAME
---------- -------------------------
1 TTT1
2 TTT21
3 TTT211
3 TTT211
1 TTT1
がLEVEL
列がテーブルをインポートしなければならない順序を提供します:以下の出力が得られます
WITH my_view AS(
select c.table_name, uc.table_name as referenced_table_name
from user_constraints c
join USER_CONS_columns uc ON c.r_constraint_name = uc.constraint_name
where c.constraint_type = 'R'
) SELECT level, m.referenced_table_name
FROM my_view m
START WITH referenced_table_name not in (select table_name from my_view)
CONNECT BY prior table_name = referenced_table_name;
そうです。
この記事をチェックしてください:https://community.oracle.com/thread/1051352?start=0&tstart=0 –