Oracle查询表、视图、序列等信息查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle查询表、视图、序列等信息查询相关的知识,希望对你有一定的参考价值。

参考技术A

  这几天做性能优化 网上找了些资料

  有时候需要导出某用户下的所有table view sequence trigger等信息 下面的SQL可以将这些信息select出来

  select * from user_tables;

  select * from user_views;

  select * from user_sequences;

  select * from user_triggers;

  想查找表的数据条数

  试试这个

  select t table_name t num_rows from user_tables t

  如果没有值 那就创建个函数

  代码

  create or replace function count_rows(table_name in varchar

  owner in varchar default null)

  return number

  authid current_user

  IS

  num_rows number;

  stmt varchar ( );

  begin

  if owner is null then

  stmt := select count(*) from ||table_name|| ;

  else

  stmt := select count(*) from ||owner|| ||table_name|| ;

  end if;

  execute immediate stmt into num_rows;

  return num_rows;

  end

  再执行查询

lishixinzhi/Article/program/Oracle/201311/18185

6.4视图序列同义词--Oracle模式对象

视图view

是一个虚拟表,不存储数据值。

Create or replace view 病人基本信息
as
select 病人id,住院号,姓名,性别,年龄 from 病人信息表;

在创建视图时,只是将视图的定义存入到数据库字典中,并没有执行select查询,只有当用户对视图查询时,系统才按照视图的定义从基本表中获取数据。

 

视图上可进行insert、update和delete操作。
一个视图中,可以同时包含可更新的字段不可更新的字段
例如:

Create or replace view 病人基本信息(病人id,住院号,姓名,性别,病人年龄)
as
select 病人id,住院号,姓名,性别,年龄+1 from 病人信息表;

年龄字段是,由源表字段“年龄”+1计算出来的,所以病人年龄字段不能更新,其他字段可以更新。
可以通过数据字典USER_UPDATABLE_COLUMNS视图,来查询哪些字段可以更新,哪些不能更新。


WITH CHECK OPTION选项

Create or replace view stu_age_view(学生编号,学生姓名,学生年龄)
as
select sid,sname,sage
from student
where name=小白;

--此时这个视图是可以insert插入数据的,如下操作:

Insert into stu_age_view(学生编号,学生姓名,学生年龄)
Values(3,‘小红‘,20);

--查询表student结果如下:
Select* from student;
SID SNAME SSEX SAGE SCLASS
---- ------- ------ ------ ------
1     小白      男      22      1
2     小明      男      21      1
3     小红               20

在更新视图时,违反了【Where name=‘小白‘】限制条件,往表中插入了数据。
可以通过在创建表的时候使用WITH CHECK OPTION选项,有了该子句,再插入类似记录时,Oracle会提示报错ora-01402:视图 WITH CHECK OPTION子句违规。

删除视图:
Drop view stu_age_view;

 

序列sequence:
用于产生一系列唯一数字的数据库对象。不占用实际存储空间,只是在字典中保存定义
使用序列可以实现自动产生主键值。

要有创建序列的权限 create sequence 或 create any sequence

创建序列的语法:
CREATE SEQUENCE sequence_name --创建序列名称
[INCREMENT BY increment--递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1
[START WITH start--起始值,递增默认是minvalue 递减是maxvalue
[MAXVALUE n | NOMAXVALUE] --最大值
[MINVALUE n | NOMINVALUE] --最小值
[CACHE n | NOCACHE]--预分配,并存入到内存
[CYCLE | NOCYCLE]; --循环/不循环

两个伪列:
NEXTVAL --返回序列生成的下一个值
CURRVAL --返回序列的当前值
NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

修改序列:
Alter sequence stu_seq increment by 2;
对序列修改后,缓存中保存的序列值将全部丢失。

删除序列:
Drop sequence stu_seq;

 

同义词synonym:
是表、索引、视图等模式对象的一个别名。不占用任何实际的存储空间。
分两类:公共同义词、私有同义词

创建同义词:
Create [public] SYNONYM synonym_name for schema_object;

删除同义词:
Drop public sysnonym pub_sysnonym_name;

----执行查找所有失效的同义词,生成删除脚本如下:

select drop || decode(s.owner,PUBLIC,public synonym ,synonym  || s.owner || .)
|| s.synonym_name
|| ; as "Dropping invalid synonyms:"
from dba_synonyms s
where table_owner not in (SYSTEM, SYS)
and db_link is null
and not exists
(select null from dba_objects o
where s.table_owner = o.owner
and s.table_name = o.object_name);

 

----查询当前用户下,没有创建同义词的对象有哪些?

Select *
from dba_objects s
where owner in (ZLHIS) And object_type In(TABLE,PROCEDURE,FUNCTIONS)
and Not exists
(select null from dba_synonyms o
Where o.table_owner = s.owner
and o.table_name = s.object_name And o.db_link is null)

 

 

以上是关于Oracle查询表、视图、序列等信息查询的主要内容,如果未能解决你的问题,请参考以下文章

oracle表,视图,存储过程,函数,序列.....查询

oracle中怎样查询用户权限

oracle 序列视图索引

oracle 怎样查询某用户下的所有表的表名

oracle 怎样查询某用户下的所有表的表名

Oracle数据库对象(视图序列索引同义词)