2016年4月15日 星期五

VIEW、SYNONYM (DDL 五)

※VIEW

官網連結
使用View時,在12c預設是沒有權限的
要用有權限的帳號登入後,下「GRANT CREATE VIEW TO 帳號;」

view的功能就是將很複雜的SQL變的很簡單,讓大家使用,所以寫view的SQL都很強,它是連到其他的table,所以其他的table改變,它也會跟著變



※範例

CREATE OR REPLACE NOFORCE VIEW v_xxx
AS
SELECT deptno dno, empno eno, dname, ename 
FROM emp natural join dept;

※一定要打AS,不能打IS

※FORCE/NOFROCE:預設是NOFORCE,所以上面的範例NOFORCE可以不打
FORCE表示連到的表不存在,也要創建view,雖然創建好了,但是還是不能SELECT
可能是多人開發時,有些table還沒創建好,但你負責的部分是要寫view,如果沒這個選項你就沒辦法寫了

※AS下面就是隨個人發揮,寫簡單的也可以,只是沒意義,欄位可以打別名

※OR REPLACE也是選項,有打的話,發現同名稱會覆蓋

※刪除view,就下「DROP VIEW v_xxx;」,沒有PURGE的選項,因為本來就是連別的表



※查詢view

SELECT * FROM tab WHERE TABTYPE = 'VIEW';
SELECT * FROM user_views;

※TAB是所有的TABLE,只是看大概的訊息

※更詳細的就要看USER_VIEWS了



※view的增刪改

增刪改當然是針對原表,而view的增刪改是有限的,這樣看你怎麼樣下SQL了
以一張表為例
正常情況和一般增刪改一樣
可是如果表裡有not null、PK的欄位,但你下SQL並沒有把它SELECT出來,所以新增就沒辦法了,修改當然也不能改成null,刪除如果有FK、PK的關係有是有可能刪不了

多張表的情況也類似這樣,反正它只能儘量增刪改
要以下出來的條件為準,view只是一個連結,而這個連結可以讓你增刪改,不能的話就要看你怎麼下SQL了

可以使用delete,但不能使用truncate



※WITH READ ONLY

CREATE OR REPLACE NOFORCE VIEW view_test
AS
SELECT * FROM EMP WHERE deptno = 30 AND job = 'SALESMAN'
WITH READ ONLY;

※加上這個語句就只能查詢而已



※WITH CHECK OPTION [CONSTRAINT xxx]

CREATE OR REPLACE NOFORCE VIEW view_test
AS
SELECT * FROM EMP WHERE deptno = 30 AND job = 'SALESMAN'
WITH CHECK OPTION;

※加上這個語句就不能修改where的欄位,也不能新增;但可以刪除

※CONSTRAINT是給一個約束名稱,不給系統會幫你產生

※以下這兩個都不能成功
UPDATE view_test SET job = 'xxx' WHERE empno = 7499;
INSERT INTO view_test(empno, ename)values(9999, 'BRUCE');



※SYNONYM

SYNONYM翻譯成代名詞,官網連結,簡單來說就是一個table的別名,這個別名等同原來的table,所以也可以增刪改查,而且原來的表也會更動


使用SYNONYM必須用sys登入才有權限
CREATE [PUBLIC] SYNONYM 代名詞名稱 FOR 帳號.表;
CREATE SYNONYM bruce FOR ooo.EMP;

※因為是用sys創建的,所以select * from bruce,只有sys帳號才看得到,如果想讓大家都看到,就要使用CREATE PUBLIC

※完成後也能在USER_SYNONYMS這張表找到

※刪除就下「DROP SYNONYM 代名詞名稱;」

沒有留言:

張貼留言