一、視圖
二、同義字
三、序列
一、視圖
視圖是一條儲存起來的 SELECT 語句,是資料的顯示方式,通過視圖可以限制使用者訪問行、列、或更新表內容。
1.1、基表
組成視圖的表稱為基表。在 Oracle 中,不能對有多個基表的視圖進行更新,此類操作可以利用"替換觸發器"完成。
1.2、視圖的更新約束
[WITH CHECK OPTION] 選項可以約束 對視圖更新值 符合 視圖的WHERE條件。
1.3、唯讀約束
[WITH READ ONLY] 選項和 視圖查詢語句包含 GROPU BY/SUM 等彙總函式、DISTINCT 關鍵字時視圖不允許更新。
1.4、查看視圖內容
DESC user_views;
SELECT text FROM user_views WHERE view_name='V_READ';
一個視圖的例子:
CREATE OR REPLACE VIEW myview
AS
SELECT * FROM books WHERE price>30
WITH CHECK OPTION;
/* 當利用視圖插入一個 price<=30 的資料時會報錯 */
二、同義字
同義字是一個對象的一個別名,利用同義字,可以方便的操縱不同使用者模式下的對象,簡化編碼。
使用同義字之前要確保使用者擁有訪問該對象的許可權。
當公有對象(公有同義字)和本機物件具有相同的名稱時,本機物件優先。
● 公有同義字:DBA建立,所有使用者共同擁有。CREATE PUBLIC SYNONYM ...
● 私人同義字:使用者建立,使用與該使用者(對象,可被授權)。
CREATE OR REPLACE SYNONYM dept FOR scott.dept;
SELECT * FROM dept;
DESC user_synonyms;
SELECT synonym_name, table_name, table_owner FROM user_synonyms;
三、序列
序列是用來產生唯一、連續的整數的資料庫物件。它通常用來自動產生主鍵或唯一鍵。序列可以按升序、降序排列。
序列是一個獨立型事務,不受提交或復原事務影響。
3.1、建立
CREATE SEQUENCE sequence_name
[START WITH integer] /* 序列起始值,升序預設為最小值,降序預設為最大值 */
[INCREMENT BY integer] /* 遞增量,預設為 1, */
[MAXVALUE integer | NOMAXVALUE] /* 最大值,預設為 NOMAXVALUE */
[MINVALUE integer | NOMINVALUE] /* 最小值,必須小於等於起始值和 小於最大值 */
[CYCLE | NOCYCLE] /* 序列到達最大值後是否迴圈,預設為 NOCYCLE 不迴圈 */
[CACHE integer | NOCACHE]; /* 是否預分配序號,預設緩衝20個序號 */
3.2、訪問
NEXTVAL 偽列:返回一個新的序列值。
CURRVAL 偽列:記憶體中最後一次引用 NEXTVAL 的傳回值,也就是序列的當前值。
INSERT INTO t1 VALUES(t1_seq.NEXTVAL, 'aaa');
SELECT t1_seq.CURRVAL FROM dual;
3.3、修改
序列建立後只能修改 最大/最小值、增量值、序號緩衝大小,不能修改起始值,並且保證序列最大/最小值符合規則。
3.4、查看
DESC user_sequences;
SELECT * FROM user_sequences WHERE SEQUENCE_NAME = 'T1_SEQ';