主键和外键

前段时间发连连一个查询数据库主外键关系的文章(http://space6212.itpub.net/post/12157/107584),但有个缺点:不能一目了然地查看多层级联关系,故今天根据以前对sql作了一些改进,以树状结构显式多层级联关系,这对于处理设置了级联删除的表非常有用


SQL> select distinct * from (select ltrim(sys_connect_by_path(pk_table||'('||pk_col||')','->'),'->') pk_fk from (
2 select
3 pk_table,
4 fk_table,
5 pk_col
6 from
7 (select
8 a.constraint_name pk_con,
9 a.table_name pk_table,b.column_name pk_col,
10 a.owner pk_owner
11 from user_constraints a,user_cons_columns b
12 where (a.constraint_type='P' or a.constraint_type='U')
13 and a.constraint_name=b.constraint_name
14 and a.owner=b.owner) pk,
15 (select c.constraint_name fk_con,
16 c.table_name fk_table,
17 d.column_name fk_col,
18 c.R_OWNER r_pk_owner,
19 c.R_CONSTRAINT_NAME r_pk_con,
20 c.owner fk_owner
21 from user_constraints c,user_cons_columns d
22 where c.constraint_type='R'
23 and c.constraint_name=d.constraint_name
24 and c.owner=d.owner) fk
25 where
26 pk.pk_owner=fk.r_pk_owner(+)
27 and pk.pk_con=fk.r_pk_con(+)
28 order by pk.pk_con
29 )
30 connect by prior fk_table=pk_table ) t where instr(pk_fk,'->')>0 order by 1
31 ;

PK_FK
--------------------------------------------------------------------------------
T1(ID)->T2(NEWT2ID)
T1(ID)->T2(NEWT2ID)->T3(ID)
T1(ID)->T3(ID)
T2(NEWT2ID)->T3(ID)

由于在9i中sys_connect_by_path函数不能处理有循环对记录集,故本例子只适合不会循环关联的表(如引用自身表的外键)

10g中sys_connect_by_path加入了对循环情况对处理,等手头有了10g环境再测试一下

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-63709/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/231499/viewspace-63709/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值