J2EE社区

苟有恒,何必三更起五更眠;
最无益,只怕一日曝十日寒.
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: 联系我



只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问