檢視主外來鍵關係
1 指定表約束查詢
column owner format a10
column table_name format a20
column column_name format a20
column constraint_name format a20
column constraint_type format a20
select
a.owner,
a.table_name,
b.column_name,
a.constraint_name,
a.constraint_type
from
user_constraints a,
user_cons_columns b
where
a.owner = b.owner and
a.table_name = b.table_name and
a.table_name = upper('&tbl')
/
------------------------------------------------------------
2 主外來鍵關係樹形查詢 (所有表或指定父表)
column lv format 999
column table_relation_tree format a70
with temp_constraints as
(
select
table_name,
constraint_name pkey_constraint,
null fkey_constraint,
null r_constraint_name
from user_constraints
where
constraint_type = 'P' or constraint_type = 'U'
union all
select
a.table_name,
a.constraint_name pkey_constraint,
b.constraint_name fkey_constraint,
b.r_constraint_name
from
user_constraints a,
user_constraints b
where
a.table_name = b.table_name and
(a.constraint_type = 'P' or a.constraint_type = 'U') and
b.constraint_type = 'R'
)
select
(level - 1) lv, rpad('-', (level-1)*5, '-') || table_name table_relation_tree
from temp_constraints
start with
fkey_constraint is null and table_name = upper('&p_tbl')
connect by
pkey_constraint <> r_constraint_name and
prior pkey_constraint = r_constraint_name
order by 1, 2
/
------------------------------------------------------------
3 主鍵外來鍵層次關係查詢
column fk format a40
column pk format a40
select
uc.constraint_name||' ('||ucc1.TABLE_NAME||'.'||ucc1.column_name||')' fk,
ucc2.constraint_name||' ('||ucc2.TABLE_NAME||'.'||ucc2.column_name||')' pk
from
user_constraints uc,
user_cons_columns ucc1,
user_cons_columns ucc2
where
uc.constraint_name = ucc1.constraint_name and
uc.r_constraint_name = ucc2.constraint_name and
ucc1.POSITION = ucc2.POSITION and
uc.constraint_type = 'R'
order by ucc1.TABLE_NAME, uc.constraint_name
/
------------------------------------------------------------
4 主鍵外來鍵層次關係查詢
column parent format a30
column child format a30
column level format 99
with v as
(
select
parent_table.table_name parent,
child_table.table_name child
from
user_tables parent_table,
user_constraints parent_constraint,
user_constraints child_constraint,
user_tables child_table
where
parent_table.table_name = parent_constraint.table_name and
parent_constraint.constraint_type IN( 'P', 'U' ) and
child_constraint.r_constraint_name = parent_constraint.constraint_name and
child_constraint.constraint_type = 'R' and
child_table.table_name = child_constraint.table_name and
child_table.table_name != parent_table.table_name
)
select level, parent, child
from (
select * from v
)
start with parent = upper('&p_tbl')
connect by prior child = parent
order by 1, 2, 3
/
------------------------------------------------------------
5 帶有複合主外來鍵關係的查詢
create or replace function get_str(p_constraint_name varchar2)
return varchar2
is
l_column_name varchar2(4000);
begin
for cur in
(
select column_name,position
from user_cons_columns
where constraint_name = p_constraint_name
order by position
) loop
if cur.position = 1 or cur.position is null then
l_column_name := cur.column_name;
else
l_column_name := l_column_name||','||cur.column_name;
end if;
end loop;
return l_column_name;
end;
/
with v_pk as
(
select distinct
a.constraint_name pk_con,
a.table_name pk_table,
get_str(a.constraint_name) pk_col,
a.owner pk_owner
from
user_constraints a,
user_cons_columns b
where
(a.constraint_type = 'P' or a.constraint_type = 'U') and
a.constraint_name = b.constraint_name and
a.owner = b.owner
),
v_fk as
(
select distinct
c.constraint_name fk_con,
c.table_name fk_table,
get_str(c.constraint_name) fk_col,
c.r_owner r_pk_owner,
c.r_constraint_name r_pk_con,
c.owner fk_owner
from
user_constraints c,
user_cons_columns d
where
c.constraint_type = 'R' and
c.constraint_name = d.constraint_name and
c.owner = d.owner
)
select
rpad(fk.fk_con,35,'.')||fk_table||'('||fk_col||')' fk_info,
rpad(pk.pk_con,35,'.')||pk_table||'('||pk_col||')' pk_info
from
(select * from v_pk) pk,
(select * from v_fk) fk
where
pk.pk_owner = fk.r_pk_owner and
pk.pk_con=fk.r_pk_con
/
column owner format a10
column table_name format a20
column column_name format a20
column constraint_name format a20
column constraint_type format a20
select
a.owner,
a.table_name,
b.column_name,
a.constraint_name,
a.constraint_type
from
user_constraints a,
user_cons_columns b
where
a.owner = b.owner and
a.table_name = b.table_name and
a.table_name = upper('&tbl')
/
------------------------------------------------------------
2 主外來鍵關係樹形查詢 (所有表或指定父表)
column lv format 999
column table_relation_tree format a70
with temp_constraints as
(
select
table_name,
constraint_name pkey_constraint,
null fkey_constraint,
null r_constraint_name
from user_constraints
where
constraint_type = 'P' or constraint_type = 'U'
union all
select
a.table_name,
a.constraint_name pkey_constraint,
b.constraint_name fkey_constraint,
b.r_constraint_name
from
user_constraints a,
user_constraints b
where
a.table_name = b.table_name and
(a.constraint_type = 'P' or a.constraint_type = 'U') and
b.constraint_type = 'R'
)
select
(level - 1) lv, rpad('-', (level-1)*5, '-') || table_name table_relation_tree
from temp_constraints
start with
fkey_constraint is null and table_name = upper('&p_tbl')
connect by
pkey_constraint <> r_constraint_name and
prior pkey_constraint = r_constraint_name
order by 1, 2
/
------------------------------------------------------------
3 主鍵外來鍵層次關係查詢
column fk format a40
column pk format a40
select
uc.constraint_name||' ('||ucc1.TABLE_NAME||'.'||ucc1.column_name||')' fk,
ucc2.constraint_name||' ('||ucc2.TABLE_NAME||'.'||ucc2.column_name||')' pk
from
user_constraints uc,
user_cons_columns ucc1,
user_cons_columns ucc2
where
uc.constraint_name = ucc1.constraint_name and
uc.r_constraint_name = ucc2.constraint_name and
ucc1.POSITION = ucc2.POSITION and
uc.constraint_type = 'R'
order by ucc1.TABLE_NAME, uc.constraint_name
/
------------------------------------------------------------
4 主鍵外來鍵層次關係查詢
column parent format a30
column child format a30
column level format 99
with v as
(
select
parent_table.table_name parent,
child_table.table_name child
from
user_tables parent_table,
user_constraints parent_constraint,
user_constraints child_constraint,
user_tables child_table
where
parent_table.table_name = parent_constraint.table_name and
parent_constraint.constraint_type IN( 'P', 'U' ) and
child_constraint.r_constraint_name = parent_constraint.constraint_name and
child_constraint.constraint_type = 'R' and
child_table.table_name = child_constraint.table_name and
child_table.table_name != parent_table.table_name
)
select level, parent, child
from (
select * from v
)
start with parent = upper('&p_tbl')
connect by prior child = parent
order by 1, 2, 3
/
------------------------------------------------------------
5 帶有複合主外來鍵關係的查詢
create or replace function get_str(p_constraint_name varchar2)
return varchar2
is
l_column_name varchar2(4000);
begin
for cur in
(
select column_name,position
from user_cons_columns
where constraint_name = p_constraint_name
order by position
) loop
if cur.position = 1 or cur.position is null then
l_column_name := cur.column_name;
else
l_column_name := l_column_name||','||cur.column_name;
end if;
end loop;
return l_column_name;
end;
/
with v_pk as
(
select distinct
a.constraint_name pk_con,
a.table_name pk_table,
get_str(a.constraint_name) pk_col,
a.owner pk_owner
from
user_constraints a,
user_cons_columns b
where
(a.constraint_type = 'P' or a.constraint_type = 'U') and
a.constraint_name = b.constraint_name and
a.owner = b.owner
),
v_fk as
(
select distinct
c.constraint_name fk_con,
c.table_name fk_table,
get_str(c.constraint_name) fk_col,
c.r_owner r_pk_owner,
c.r_constraint_name r_pk_con,
c.owner fk_owner
from
user_constraints c,
user_cons_columns d
where
c.constraint_type = 'R' and
c.constraint_name = d.constraint_name and
c.owner = d.owner
)
select
rpad(fk.fk_con,35,'.')||fk_table||'('||fk_col||')' fk_info,
rpad(pk.pk_con,35,'.')||pk_table||'('||pk_col||')' pk_info
from
(select * from v_pk) pk,
(select * from v_fk) fk
where
pk.pk_owner = fk.r_pk_owner and
pk.pk_con=fk.r_pk_con
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22558114/viewspace-1097799/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 求主外來鍵的關係
- MySQL 檢視資料庫中有主外來鍵關係的表資訊MySql資料庫
- mysql主外來鍵依賴關係MySql
- 資料庫的主外來鍵關係資料庫
- oracle 主外來鍵關係及實驗Oracle
- EntityFramework Core 遷移忽略主外來鍵關係Framework
- 求主外來鍵的關係的指令碼(ZT)指令碼
- MySQL建立資料表並建立主外來鍵關係MySql
- ORACLE查詢表之間的主外來鍵關係Oracle
- Oracle 查詢表與表之間的 主外來鍵關係Oracle
- 關於主外來鍵關係DML父表和DML子表加鎖方式
- 父表修改與外來鍵的關係(主鍵DML與外來鍵的關係)
- EF Code First中的主外來鍵約定和一對一、一對多關係的實現
- 主外來鍵關聯刪除(on delete set null和on delete cascade)deleteNull
- oracle主外來鍵鎖_lock_約束Oracle
- 批量刪除MSSQL 中主外來鍵約束SQL
- sql 查詢 主外來鍵的 一點心得SQL
- Django(15)外來鍵和表關係Django
- 關於主外來鍵表資料提交過程中的一點疑惑
- Linux檢視相關係統資訊Linux
- 淺談Oracle 主外來鍵刪除語法格式Oracle
- 生產庫故障分析(主外來鍵和DML效能分析)
- Hibernate-select new Object(Entity obj)非主外來鍵關聯物件查詢Object物件
- Oracle查詢表的外來鍵引用關係Oracle
- 【檢視】SMON_SCN_TIME檢視--SCN與時間的對應關係
- [20160704]NULL與主外來鍵問題.txtNull
- 針對XML資料的關係型檢視XYXML
- Oracle 資料庫檢視與基表的關係Oracle資料庫
- 細品慢酌QuickTest關鍵檢視(1)UI
- 系統關鍵程式的檢視和比較
- 主鍵與主鍵索引的關係索引
- android studio中如何檢視類的關係等Android
- 開發CMP關係的時候,是建立主鍵表CMP關係然後指向外來鍵表CMP,還是反之?
- 利用虛擬列實現虛擬刪除的主外來鍵約束
- 為什麼在資料倉儲中很少使用主外來鍵約束
- 如何檢視Oracle RAC的asm磁碟的udev對應關係OracleASMdev
- MFC中文件檢視框架和文件模板之間的關係框架
- 文件 檢視 框架視窗間的關係和訊息傳送規律 (轉)框架