列举当前用户或指定用户的所有表,所有字段,以及所有约束
当前用户自己的表:
select table_name from user_tables; 用户自己拥有的表
其它用户的表:
select table_name from all_tables; //所有用户的表
select * from all_tab_cols where owner='DATABACK' order by table_name,column_name
--查询某表所有外键对应的列名、主表名、主表列名
--下面sql只用到了两张表 user_constraints 和 user_cons_columns
--user_constraints表主要记录了 表名、约束名、对应关联表的约束名,可以理解为子表、外键约束名、主表主键约束名
--user_cons_columns 主要记录了 每张表的约束名(包括主键约束和外键约束)以及对应的字段
--因此,要找到某子表所有的外键字段以及对应的主表和主表字段,关键是利用第一张表user_constraints的两个字段,子表的外键约束名和对应的主表的主键约束名。
--将user_constraints重复成两张表cn1和cn2,它俩的关系是cn1.r_constraint_name=cn2.constraint_name
--然后将各自的表名和列名显示出来就行。
关键点:user_constraints这张表里,如果记录的外键关系(CONSTRAINT_TYPE=R)时,它的R_CONSTRAINT_NAME字段会记录主键约束名称。而当记录主键关系(CONSTRAINT_TYPE=P)时R_CONSTRAINT_NAME为空
select cn1.table_name,uc1.column_name,cn2.table_name,uc2.column_name
from user_constraints cn1,user_constraints cn2, user_cons_columns uc1, user_cons_columns uc2
where
cn1.table_name='GM_ARC'
and cn1.constraint_type='R'
and cn1.r_constraint_name=cn2.constraint_name
and cn1.constraint_name=uc1.constraint_name
and cn2.constraint_name=uc2.constraint_name
主键名称、外键在all_constraints
索引在all_indexes