元数据查询,可以查找在给定模式(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经典实例》
网友评论