Oracle 筆記(十)、視圖、同義詞、序列

一、視圖
    視圖是一條存儲起來的 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';


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章