posted on 2013-04-02 09:53
xcp 阅读(3087)
评论(0) 编辑 收藏 所属分类:
database
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: