ORACLE VIEW和SEQUENCE的用法

說下oracle中視圖和序列的用法:

視圖

視圖是通過對一個或多個表定義查詢得到的,視圖定義所依據的表被稱爲基表,說簡單點就是視圖聯合一張或多張表另外成立一張表,可以對這張表進行搜素和DML操作。

建立視圖

 create view terminal_view as (select a.terminal_name, b.pdline_name,c.process_name,d.stage_name,e.emp_name,A.UPDATE_TIME  from sys_terminal a , sys_pdline b , sys_process c , sys_stage d , sys_emp e where 
 A.PDLINE_ID = b.pdline_id and a.process_id = c.process_id and a.stage_id = d.stage_id and A.UPDATE_USERID = E.EMP_ID);

注意 AS後面其實就是一個select語句,該語句查詢得到的數據即形成視圖,改變相關基表的數據會立馬反應到視圖上面。

使用視圖的方式同普通table一樣:

select * from terminal_view where emp_name = '001'; 

注意:

實際上,對視圖執行DML也就是對基表執行DML. 對於多表聯接的視圖,必須要保證如下的條件才能進行DML操作: 

(1) 在創建視圖的SQL語句中,不能含有 group by ,compute,order by 以及集合操作的函數.

 (2) 在創建的視圖中,必須含有各個基本的主鍵.

 (3) 在創建視圖的SQL語句中,不能含有子查詢語句,也就是說,創建視圖的SQL語句必須是簡單SQL語句


序列

Oracle提供了sequence對象,由系統提供自增長的序列號,通常用於生成數據庫數據記錄的自增長主鍵或序號的地方。

Sequence是數據庫系統按照一定規則自動增加的數字序列。這個序列一般作爲代理主鍵(因爲不會重複),沒有其他任何意義。

創建

Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE權限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 — 每次加幾個
START WITH 1 — 從1開始計數
NOMAXVALUE — 不設置最大值
NOCYCLE — 一直累加,不循環
CACHE 10;
一旦定義了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的當前值
NEXTVAL=增加sequence的值,然後返回 sequence 值

如下,起點爲3,每次增長2,最大999,可循環:

CREATE SEQUENCE SEQ_LC_TEST INCREMENT BY 2 START WITH 3 MAXVALUE 999 MINVALUE 1 CYCLE CACHE 3 ORDER;
使用方法:

SELECT SEQ_LC_TEST.NEXTVAL FROM DUAL;--每使用一次NEXTVAL 相應的sequence會自增一次
SELECT SEQ_LC_TEST.CURRVAL FROM DUAL;--返回當前值,不自增
INSERT INTO emp VALUES (<span style="font-family: Arial, Helvetica, sans-serif;">SEQ_LC_TEST</span><span style="font-family: Arial, Helvetica, sans-serif;">.nextval, ‘LEWIS’, ‘CLERK’,7902, SYSDATE, 1200, NULL, 20);--一般放在insert語句中</span>
注意:

第一次NEXTVAL返回的是初始值;隨後的NEXTVAL會自動增加你定義的INCREMENT BY值,然後返回增加後的值。CURRVAL 總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之後才能使用CURRVAL,否則會出錯。一次NEXTVAL會增加一次SEQUENCE的值,所以如果你在不同的SQl語句裏面使用NEXTVAL,其值是不一樣的。



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