关于模式对象的一些操作技巧
				
		
		
				
				 
		
				
				 
		
				
						    模式对象基本上已经都介绍完了,还需要在做一些扫尾的工作,将一些小的操作技巧稽核在一起介绍一下。因为太小的操作技巧,而且本身的内容也很简单,不值得花费太多的篇幅来记载,所以专门花一篇的篇幅来总结这些东西。
				
		
		
				
						
						
				 
		
				
				 
		
				
						
								一、用CREATE SCHEMA创建多个对象
						
				
		
		
				
						
						
				 
		
				
						    Oracle可以使用CREATE SCHEMA语句来同时创建多个对象,用原话就是:Use the CREATE SCHEMA statement to create multiple tables and views and perform multiple grants in your own schema in a single transaction.
				
		
		
				
						
						
				 
		
				
						    操作的语法很简单,看下面的例子就可以完全掌握:
				
		
		
				
				 
		
				
						
								    create schema authorization test
    create table t11(a int,b int)
    create view t111 as select * from t11
    grant select on t111 to wangxiaoqi;
				
		
		
				
				 
		
				
						    需要说明的问题有3点:
				
		
		
				
						
						
				 
		
				
						    1、这个语句不是用来创建schema的,而是创建schema中的对象,即user是需要事先创建好的
				
		
		
				
						    2、DBA默认不具备执行其他用户的schema,即必须以authorization后面的user登录方可执行该语句
				
		
		
				
						    3、该语句只支持CREATE TABLE、CRAETE VIEW、GRANT三个语句
				
		
		
				
				 
		
				
				 
		
				
						二、重命名模式对象
				
		
		
				
				 
		
				
						    绝大多数的object都是可以重命名的,语法是:RENAME ... TO ...
				
		
		
				
						
						
				 
		
				
						    举例(无需指名类型):
				
		
		
				
						
						
				 
		
				
						    rename t11 to t22;
    rename t111 to t222;
				
		
		
				
				 
		
				
						    说明:
				
		
		
				
						
						
				 
		
				
						    1、支持的类型有:table、view、sequence、synonym
				
		
		
				
						    2、当rename时,对象的constraint、index也相应更新
				
		
		
				
						    3、不支持:PLSQL单元、public synonym、index、cluster
				
		
		
				
				 
		
				
				 
		
				
						三、删除表和簇
				
		
		
				
				 
		
				
						    用于删除Oracle中的表的命令有3种,分别是delete、drop、truncate,来看一下各自的语法:
				
		
		
				
						
						
				 
		
				    delete from t11; --可以加where子句
		
		
				
						    drop table t11;
				
		
		
				
						    truncate table t11;
				
		
		
				
						
						
				 
		
				
						    关于具体的truncate用法和这三种删除方法的比较,在我之前的文章《Truncate Table介绍》里有比较详细的介绍,可以看哪个内容。
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						四、启用/停用Trigger
				
		
		
				
				 
		
				
						    启用和停用触发器的语法也还是比较简单的,看一下吧:
				
		
		
				
						
						
				 
		
				
						    alter trigger xxxx enable;
				
		
		
				
						    alter table xxxx enable all trigger;
				
		
		
				
						
						
				 
		
				
						
								
										
												    alter trigger xxxx disable;
										
								
								
										
												    alter table xxxx disable all trigger;
										
								
						
				
		 
		
				
				 
		
				
						    触发器的停用,一般是由于以下几个原因:
				
		
		
				
						
						
				 
		
				
						    1、触发器的参照对象当前不可用
				
		
		
				
						    2、需要执行大量装载而又不希望激活触发器
				
		
		
				
						    3、正在往使用触发器的表里装载数据
				
		
		
				
						
						
				 
		
				
						    需要专门说明的是,以下几种情况,触发器会被隐式激活:
				
		
		
				
						
						
				 
		
				
						    1、在一个相关的表上执行DML
				
		
		
				
						    2、在数据库或模式中的对象上执行某DDL语句
				
		
		
				
						    3、特殊的数据库时间发生(startup、shutdown、servererror)
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						五、对象的依赖性
				
		
		
				
				 
		
				
						    对象如果被修改之后,依赖于它的其它对象很有可能也会受到影响,变成INVALID状态,这个关系比较复杂,用一张图表示:
				
		
		
				
						
						
				 
		
		
				
				 
		
				
						    要将INVALID的OBJECT变为VALID很简单,只需要重新编译即可,语法如下:
				
		
		
				
						
						
				 
		
				    alter view xxxx compile;
		
		
				    alter procedure xxxx complie;
		
		
				
						    alter package xxxx compile body;
				
		
		
				
						    alter package xxxx compile package;