Oracle经典实例——元数据查询

2020-03-27  本文已影响0人  梭哈侠

元数据查询,可以查找在给定模式(schema)中创建的表,某个表的字段、索引、约束、数据字典等

1.列举模式中的表

所创建的表都包含在数据库的系统表或视图里,直接查询即可:

select table_name from all_tables where owner='SYS';

Oracle数据库含有如ALL_TABLES这样丰富的系统视图,可以查询关于表、索引、授权以及其他数据库对象的信息

2.列举字段

列举一个表的字段,以及它们的数据类型和在表中的位置:

select colunm_name,data_type,column_id from all_tab_colunms 
    where owner='SYS' and table_name='table_name';

ALL_TAB_COLUMNS还包含其他该表的信息

3.列举索引列

列出某个表的索引,包括构成索引的各列及其位置序号:

select table_name,index_name,column_name,column_position from all_ind_columns
    where table_name='table_name' and table_owner='SYS';

知道哪些列创建了索引对于查询来说是很重要的,了解索引能有效避免一些潜在的性能问题

4.列举约束

列出模式中某个表的约束,以及与这些约束相关的列:

select t1.table_name,
       t1.constraint_name,
       t2.column_name,
       t1.constraint_type
  from all_constraints t1, all_cons_columns t2
 where t1.table_name = 'student'
   and t1.table_name = t2.table_name
   and t1.owner = t2.owner
   and t1.constraint_name = t2.constraint_name; 
5.用SQL生成SQL

使用字符串拼接SQL语句,通过查询填入需要的数据:
生成SQL以计算各个表的行数

select 'select count(*) from '||table_name||';'cns from user_tables;

禁用所有表的外键约束

select 'alter table '||table_name||'disable constraint '||constraint_name||';'cons
    from user_constraints where constraint_type='R';

根据表的某些列生成插入脚本

select 'insert into table1(field1,field2,field3)'||char(10)||'
    values(value1,value2,value3);'inserts 
    from emp where condition;

整理自《SQL经典实例》

上一篇下一篇

猜你喜欢

热点阅读