虚谷数据库-如何通过系统表查询表的相关信息

文章详细介绍了在Oracle数据库中进行表存在性检查、模式内表查询、关联关系分析、表结构查看、数据大小统计、分区信息、列存在性和索引检查等操作的SQL语句,适用于不同权限用户和库环境。
摘要由CSDN通过智能技术生成

1、查询库中某个表是否存在

--非系统库下查询,使用拥有dba权限的用户查询,表名需要大写
select count(*) from dba_tables where table_name ='TABLE_NAME';
--在非系统库,使用拥有dba权限的用户查询,用小写表名查询的方法
select count(*) from dba_tables where lower(table_name)='table_name';
--在系统库(SYSTEM)下,表名可以大写也可以小写
select count(*) from sys_tables where table_name ='TABLE_NAME/table_name';

2、查询某个模式里的所有表

--在任何库下使用拥有dba权限的用户查询
select db_name,schema_name,table_name from dba_tables  t
inner join dba_schemas s on t.schema_id=s.schema_id and t.db_id=s.db_id
inner join dba_databases d on t.db_id=d.db_id
where schema_name='模式名'
and db_id='库id';

3、查询表的关联关系

--在任何库下使用任何用户查询
select ut1.table_name as fk_name,ut2.table_name as pk_name
from
user_constraints uc
join
user_tables ut1
on
uc.table_id=ut1.table_id
join
user_tables ut2
on
uc.ref_table_id=ut2.table_id;

4、表结构查询(登陆指定库)

--SQL1:(在任何库下使用拥有dba权限的用户查询)
select t.table_name,t.table_id,c.col_no,c.col_name,c.type_name,trunc(c.scale/65536)::int as scale_1,mod(c.scale,65536) as scale_2,c.not_null,c.comments from dba_columns c,dba_tables t where t.table_id=c.table_id and c.db_id=current_db_id and t.table_name='表名' order by c.col_no;

--SQL2:(用户SYSDBA登陆系统库SYSTEM执行,比SQL1多了指定模式,查询出的字段与SQL1相同)
select t.table_name,t.table_id,c.col_no,c.col_name,c.type_name,trunc(c.scale/65536)::int as scale_1,mod(c.scale,65536) as scale_2,c.not_null,c.comments from sys_columns c join sys_tables t on t.table_id=c.table_id  and t.db_id=c.db_id join sys_schemas s on t.schema_id=s.schema_id and t.db_id=s.db_id join sys_databases d on t.db_id=d.db_id where D.db_name='库名' and t.table_name='表名' and s.schema_name='模式名' order by c.col_no;

--SQL3:(--在任何库下使用拥有dba权限的用户查询,比SQL1多个字段类型是否是可变长度的字符串 varying)
select t.table_name,t.table_id,c.col_no,c.col_name,c."varying",decode(c."varying",true,'VARCHAR',c.type_name) t_name,
trunc(c.scale/65536)::int as scale_1,mod(c.scale,65536) as scale_2,c.not_null,c.comments from dba_columns c,dba_tables t 
where t.table_id=c.table_id and c.db_id=current_db_id and t.table_name='表名' order by c.col_no;


--SQL4:(在任何库下使用拥有dba权限的用户查询,适合于分区表的表结果查询)
select schema_name,col_name,parti_type,parti_num,parti_key,* from dba_columns c
inner join dba_tables t  on t.table_id=c.table_id
inner join dba_schemas s on t.schema_id=s.schema_id
where schema_name='模式名'
and table_name='表名'
order by col_no;

5、单张表数据大小统计(TB、GB)

--SQL1:(--用户SYSDBA登陆系统库SYSTEM执行,单位TB)
select d.db_name,sn.schema_name,t.table_name,count(*)*8/1024/1024||'T'  as cnt from sys_schemas sn,sys_tables t,sys_gstores s,sys_databases d where s.obj_id=t.table_id and sn.schema_id=t.schema_id and sn.db_id=t.db_id and s.db_id=d.db_id and sn.db_id=t.db_id and db_name='库名' and t.table_name='表名' group by t.table_name,sn.schema_name,d.db_name;  

--SQL2:(--用户SYSDBA登陆系统库SYSTEM执行,单位GB) 
select d.db_name,sn.schema_name,t.table_name,count(*)*8/1024 || 'G' as cnt  from sys_schemas sn,sys_tables t,sys_gstores s,sys_databases d where s.obj_id=t.table_id and sn.schema_id=t.schema_id and sn.db_id=t.db_id and s.db_id=d.db_id and sn.db_id=t.db_id and db_name='库名' and t.table_name='表名' group by t.table_name,sn.schema_name,d.db_name;        

6、查询某个列在哪些表中存在

--在任何库下使用拥有dba权限的用户查询
select s.schema_name,t.table_name from dba_tables t,dba_columns c,dba_schemas s where t.schema_id=s.schema_id 
and t.table_id=c.table_id and c.col_name='列名';

7、查看表分区名

--在任何库下使用拥有dba权限的用户查询
select parti_name,parti_val from dba_partis p,dba_tables t,dba_schemas s where p.table_id=t.table_id and t.schema_id=s.schema_id and t.table_name='表名' and s.schema_name='模式名' order by parti_val;

8、查询表分区情况

--在任何库下使用拥有dba权限的用户查询
select t.table_name,t.parti_key,T.AUTO_PARTI_SPAN,DECODE(T.AUTO_PARTI_TYPE,1,'年',2,'月',3,'日') from dba_tables t,dba_schemas s where t.schema_id=s.schema_id and s.schema_name='模式名' and regexp_like(t.table_name,'abc');--以abc开头的table_name

9、查询列,列顺序

--在任何库下使用拥有dba权限的用户查询
declare
sql varchar;
a int;
na varchar;
begin
na:='AA';
sql:='select ';
a:=0;
for i in (select a.col_name from DBA_columns a,DBA_tables b,DBA_SCHEMAS c where c.schema_id=b.schema_id and a.table_id=b.table_id 
and b.table_name=na and c.schema_name='模式名' order by col_no) loop
if a=0 then 
sql:=sql||i.col_name;
else
sql:=sql||','||i.col_name;
end if;
a :=a+1;
end loop;
sql:=sql||' from usr_sod.'||na;
send_msg(sql);
end;
/

10、对比模式下的表名

--在任何库下使用拥有dba权限的用户查询
select a.table_name from (select t.table_name from dba_tables t join dba_schemas s on t.schema_id=s.schema_id and s.schema_name='TCZX_TY_AOBOIP') a,
(select t.table_name from dba_tables t join dba_schemas s on t.schema_id=s.schema_id and s.schema_name='TCZX_TY_IOOIP') b,(select t.table_name from dba_tables t join dba_schemas s on t.schema_id=s.schema_id and s.schema_name='TCZX_TY_EPLUS') c 
where a.table_name=b.table_name and b.table_name=c.table_name;

11、查询指定模式下的分区表

--在任何库下使用拥有dba权限的用户查询
select s.schema_name,t.table_name
from dba_partis p
join dba_tables t on p.table_id=t.table_id
join dba_schemas s on t.schema_id=s.schema_id 
where s.schema_name in ('A','B','C','D')
group by s.schema_name,t.table_name
order by s.schema_name,t.table_name;

12、查看没有唯一值索引的表

--在任何库下使用拥有dba权限的用户查询
select s1.schema_name,t1.table_name 
from dba_tables t1,dba_schemas s1 
where t1.schema_id=s1.schema_id 
and s1.schema_name='模式名'
and table_name not in (select t.table_name from dba_tables t,dba_indexes i,dba_schemas s where t.table_id=i.table_id 
and t.schema_id=s.schema_id 
and is_unique='true' 
and s.schema_name='模式名' group by t.table_name);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值