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
=
要查询的表
查询外键约束的列名:
select
*
from
user_cons_columns
cl
where
cl.constraint_name
=
外键名称
查询引用表的键的列名:
select
*
from
user_cons_columns
cl
where
cl.constraint_name
=
外键引用表的键名
5、查询表的所有列及其属性
select
t.*,c.COMMENTS
from
user_tab_columns
t,user_col_comments
c
where
t.table_name
=
c.table_name
and
t.column_name
=
c.column_name
and
t.table_name
=
要查询的表
6、Oracle中每个用户表的表名和行数
select
table_name,num_rows
from
user_tables;
7、Oracle查询用户表空间:select
*
from
user_all_tables
8、Oracle查询所有函数和储存过程:select
*
from
user_source
9、Oracle查询所有用户:
select
*
from
all_users;
select
*
from
dba_users
10、Oracle查看当前用户连接:select
*
from
v$Session
11、Oracle查看当前用户权限:select
*
from
session_privs
12、Oracle查看用户表空间使用情况:
select
a.file_id
"FileNo",a.tablespace_name
"Tablespace_name",
a.bytes
"Bytes",a.bytes-sum(nvl(b.bytes,0))
"Used",
sum(nvl(b.bytes,0))
"Free",
sum(nvl(b.bytes,0))/a.bytes*100
"%free"
from
dba_data_files
a,
dba_free_space
b
where
a.file_id=b.file_id(+)
group
by
a.tablespace_name
,
a.file_id,a.bytes
order
by
a.tablespace_name;
向有主键的表中插入大量数据(千万级),会遇到主键冲突的问题,有两种办法可以捕获到主键冲突
1.自己判断主键冲突
select count(*) into v_cnt from table_name where primary_key = pk
if v_cnt = 0 then
insert into table_name values(pk);
end if;
2.oracle系统判断主键冲突
直接将数据插入表中,出现冲突则捕获异常并且忽略进行下一条数据插入,没有则直接插入
第一种办法的效率要高于第二种方法,请教各位大神有没有什么更高效的办法?
select a.constraint_name, a.column_name
from user_cons_columns a, user_constraints b
where a.constraint_name = b.constraint_name
and b.constraint_type = 'P'
and a.table_name = 'AA'-------大写
查看AA表的主键约束名称,以及主键约束的字段名称。 结果集就是该表的主键
主键就是自己设定的字段,该字段不能为空,而且该字段的值必须唯一,外键就是在主表中可以重复出现,但是它是另一个表的主键,对过外键使两个表相关.
select a.constraint_name, a.column_name
from user_cons_columns a, user_constraints b
where a.constraint_name = b.constraint_name
and b.constraint_type = 'P'
and a.table_name = 'AA'-------大写
查看AA表的主键约束名称,以及主键约束的字段名称。 结果集就是该表的主键
一般的情况下,表的主键是必要的,没有主键的表可以说是不符合设计规范的。
SELECT table_name FROM User_tables t WHERE NOT EXISTS
(SELECT table_name FROM User_constraints c WHERE constraint_type = 'P' AND t.table_name=c.table_name)
其它相关数据字典解释
user_tables 表
user_tab_columns 表的列
user_constraints 约束
user_cons_columns 约束与列的关系
user_indexes 索引
醒找一个表中的主键
select distinct a.owner,a.constraint_type,a.table_name,b.column_name from all_constraints a,all_cons_columns b where a.OWNER='TMLHSYS2' and a.TABLE_NAME='TB_BUSINFO' and a.constraint_type='P' and a.CONSTRAINT_NAME=b.CONSTRAINT_NAME;
TB_BUSINFO 替换为自己的表名,TMLHSYS2替换为自己的登录名