我现在要设计一个数据库编辑器。由于对sql语句的不熟悉,思路现在有些混乱。比如我创建了一个test用户,在他下面已经存在很多表。我要知道这些表的名字、字段、关联关系、索引、约束条件等。不考虑每个表存了多少数据,只考虑表的结构。
第一步:要知道用户下所有的表名;
第二步:要知道每个表所有的字段;
第三步:所有表的关联关系。
希望各位老师给予指点。特别是提供实现的sql语句。谢谢!!!

解决方案 »

  1.   


    要都找出来比较繁琐:
    1.SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER=UPPER('用户名');
    2.SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME=UPPER('表名') AND OWNER=UPPER('用户名');
    3.找表下面的索引:
      SELECT INDEX_NAME FROM ALL_INDEXES WHERE TABLE_NAME=UPPER('表名') AND OWNER=UPPER('用户名');
      找外键约束,这个比较麻烦(R_CONSTRAINT_NAME 只的是它引用的那个主键,CONSTRAINT_TYPE='R'的为外键):
      SELECT CONSTRAINT_NAME,R_CONSTRAINT_NAME FROM ALL_CONSTRAINTS WHERE OWNER=UPPER('用户名') AND CONSTRAINT_TYPE='R';
      然后在根据以上结果找到外键用的那个表的那个字段,它引用的主键用的那个表的那个字段:
      SELECT TABLE_NAME,COLUMN_NAME FROM ALL_CONS_COLUMNS WHERE CONSTRAINT_NAME=UPPER('主键或者外键的名字')
      

  2.   

    约束条件都在ALL_CONSTRAINTS这个VIEW中找,主键约束条件CONSTRAINT_TYPE='R'
    唯一约束条件CONSTRAINT_TYPE='U'
      

  3.   

    错了主键约束条件CONSTRAINT_TYPE='P'