※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 代名詞名稱;」
沒有留言:
張貼留言