關于模式對象的一些操作技巧
?
?
??? 模式對象基本上已經都介紹完了,還需要在做一些掃尾的工作,將一些小的操作技巧稽核在一起介紹一下。因為太小的操作技巧,而且本身的內容也很簡單,不值得花費太多的篇幅來記載,所以專門花一篇的篇幅來總結這些東西。
?
?
一、用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;
??? 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;
??? 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;
?
?
?