oracle查询所有用户表的表名、主键名称、索引、外键等 -凯发k8网页登录

苟有恒,何必三更起五更眠;
最无益,只怕一日曝十日寒.
posts - 241, comments - 318, trackbacks - 0, articles - 16
1、查找表的所有索引(包括索引名,类型,构成列):
select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表 
2、查找表的主键(包括名称,构成列):
select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'p' and au.table_name = 要查询的表 
3、查找表的唯一性约束(包括名称,构成列): 
select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'u' and au.table_name = 要查询的表 
4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询): 
select * from user_constraints c where c.constraint_type = 'r' and c.table_name = 要查询的表 
5、查询外键约束的列名:
select * from user_cons_columns cl where cl.constraint_name = 外键名称 
6、查询引用表的键的列名:
select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名      

实例:
7、查询没有建立主键的表 
select u.table_name, u.num_rows
  from user_tables u
 where not exists (select cu.table_name
          from user_cons_columns cu, user_constraints au
         where cu.constraint_name = au.constraint_name
           and au.constraint_type = 'p'
           and au.table_name = u.table_name)
   and u.num_rows is not null
 order by u.num_rows desc;
8、查询表记录中有空值的索引字段
-- create table
create table temp_index
(
  id          varchar2(32),
  table_name  varchar2(100),
  column_name varchar2(100),
  index_name  varchar2(100),
  scsj        date
)
tablespace jg_zfgfh
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 16
    minextents 1
    maxextents unlimited
  );
-- add comments to the table 
comment on table temp_index
  is '放入索引值有空的表和列';
-- add comments to the columns 
comment on column temp_index.id
  is '自动生成';
comment on column temp_index.table_name
  is '表名';
comment on column temp_index.column_name
  is '字段名称';
comment on column temp_index.index_name
  is '索引名称';
comment on column temp_index.scsj
  is '生成时间';

create or replace procedure p_process_index
/*********************************************************************************
         -----------功能:得到表索引字段中有空值字段
         -----------作者: xcp
         -----------创建日期:2013-02-20
         -----------版本 v1.0
  ******************************************************************************
*/
 is
  cursor t_index_cursor is
    select i.table_name, t.column_name, t.index_name
      from user_ind_columns t, user_indexes i, user_tab_cols c
     where t.index_name = i.index_name
       and t.column_name = c.column_name
       and t.table_name = i.table_name
       and c.table_name = i.table_name
     order by c.column_id;
  t_count number:=0;
  t_sql   varchar2(1000);
  t_pre_table_name varchar2(100);
begin
  --清空记录保存表
  delete from temp_index;
  commit;
  
  --重新清理
  for t_index in t_index_cursor loop
     --事务控制,每个表提交一次
     if t_pre_table_name is null then
       t_pre_table_name:=t_index.table_name;
     elsif t_pre_table_name<>t_index.table_name then
       commit
     end if;
     
     --求是该索引字段是否有空
     begin
       t_sql:='select count(1)  from '||t_index.table_name||' where '||t_index.column_name||' is null ' ;
       --dbms_output.put_line(t_sql);
       execute immediate t_sql into t_count;
       --dbms_output.put_line(t_count) ;  
       if t_count>0 then
         insert into temp_index values(sys_guid(),t_index.table_name,t_index.column_name,t_index.index_name,sysdate);
       end if;
     exception
       when others then dbms_output.put_line('no data found!');
     end;
  end loop;  
  
  --事务控制,最后一个表的事务
  if t_index_cursor%notfound then
    commit;
  end if;
end p_process_index;



名称: ♪4c.esl | .↗evon
口号: 遇到新问题♪先要寻找一个方案乄而不是创造一个方案こ
mail:


网站地图