1,視圖概念:
視圖是一個(gè)邏輯結(jié)構(gòu),本身不包含任何數(shù)據(jù),是一個(gè)可命名的select語(yǔ)句。 透過(guò)視圖可以看到底層數(shù)據(jù),但是視圖和數(shù)據(jù)是相互獨(dú)立的。
2,創(chuàng)建視圖需要有DBA權(quán)限。
3,語(yǔ)法:CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view[(alias[,alias]..)]
AS subquery;
4,create or replace 表示若視圖存在則替換掉;
如:
SQL> create view testview3
2 as 3 select * from test3; 視圖已創(chuàng)建。
SQL> create view testview3
2 as 3 select * from test3; create view testview3 * 第 1 行出現(xiàn)錯(cuò)誤: ORA-00955: 名稱已由現(xiàn)有對(duì)象使用 修改視圖:
SQL> create or replace view testview3
2 as 3 select * from test3; 視圖已創(chuàng)建。
5,force 表示若表不存在則強(qiáng)制創(chuàng)建視圖; 如:SQL> create view tt
2 as 3 select * from tt; create view tt * 第 1 行出現(xiàn)錯(cuò)誤: ORA-01731: 出現(xiàn)循環(huán)的視圖定義 SQL> create force view tt 2 as 3 select * from tt; 警告: 創(chuàng)建的視圖帶有編譯錯(cuò)誤。
6,查看視圖結(jié)構(gòu):
SQL> desc testview3;
名稱 是否為空? 類型 ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER(38) LNAME VARCHAR2(20) FNAME VARCHAR2(20) 7,在使用聚合函數(shù)創(chuàng)建視圖時(shí),需制定別名;
SQL> create view testview4
2 as 3 select id,sum(id) from test3 4 group by id; select id,sum(id) from test3 * 第 3 行出現(xiàn)錯(cuò)誤: ORA-00998: 必須使用列別名命名此表達(dá)式 SQL> create view testview4 2 as 3 select id,sum(id) test3_id from test3 4 group by id; 視圖已創(chuàng)建。
===========================
***************************
8,更新視圖:
SQL> select * from testview5;
TEST5_ID TEST5_NAME TEST5_FNAME
---------- -------------------- -------------------- 3 kong sales 2 hh SQL> update testview5 set test5_name='kong_gai'
2 where test5_id=3; 已更新 1 行。
SQL> select * from testview5;
TEST5_ID TEST5_NAME TEST5_FNAME
---------- -------------------- -------------------- 3 kong_gai sales 2 hh ========================================================= CREATE TABLE count1
(num1 NUMBER(4,2), num2 NUMBER(5,2), result NUMBER(6,2)); select * from count1 insert into count1 values(1,2,3) insert into count1 values(3,4,5) -------------------------- create or replace view testview3 as select * from count1 ------------------- select * from testview3 update testview3 set num1 = 9 where num2=2 ----通過(guò)更新視圖,更新了視圖檢索的數(shù)據(jù),同時(shí)更新了基本表中的數(shù)據(jù): 1. select * from testview3
2. select * from count1
---------------------------------
對(duì)另一個(gè)數(shù)據(jù)對(duì)象而言同義詞是一個(gè)別名。public同義詞是針對(duì)所有用戶的,相對(duì)而言private同義詞則只針對(duì)對(duì)象擁有者或被授予權(quán)限的賬戶。
在本地?cái)?shù)據(jù)庫(kù)中同義詞可以表示表、視圖、序列、程序、函數(shù)或包等數(shù)據(jù)對(duì)象,也可以通過(guò)鏈接表示另一個(gè)數(shù)據(jù)庫(kù)的對(duì)象。 ------------------------------
1.創(chuàng)建同義詞語(yǔ)句:
其中第一個(gè)table_name和第二個(gè)table_name可以不一樣。 此外如果要?jiǎng)?chuàng)建一個(gè)遠(yuǎn)程的數(shù)據(jù)庫(kù)上的某張表的同義詞,需要先創(chuàng)建一個(gè)Database Link(數(shù)據(jù)庫(kù)連接)來(lái)擴(kuò)展訪問(wèn),然后在使用如下語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)同義詞:create synonym table_name for table_name@DB_Link; 當(dāng)然,你可能需要在user用戶中給當(dāng)前用戶(user2)授權(quán): grant select/delete/update on user2 2.刪除同義詞:
3.查看所有同義詞:
同義詞擁有如下好處:
節(jié)省大量的數(shù)據(jù)庫(kù)空間,對(duì)不同用戶的操作同一張表沒(méi)有多少差別; 擴(kuò)展數(shù)據(jù)庫(kù)的使用范圍,能夠在不同的數(shù)據(jù)庫(kù)用戶之間實(shí)現(xiàn)無(wú)縫交互;
同義詞可以創(chuàng)建在不同的數(shù)據(jù)庫(kù)服務(wù)器上,通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)連接。
-------------------------------------------------
問(wèn)題描述:
有兩個(gè)oralce實(shí)例 SID分別為 A B A中a用戶下含有表objects B中有b用戶 使在B中用b用戶登錄后執(zhí)行 select * from objects 能顯示出A中a.objects的全部?jī)?nèi)容 問(wèn)題解答: 用b用戶登錄到B中,執(zhí)行: create public synonym objects for a.objects@A 此時(shí)執(zhí)行select * from objects 就能顯示出a.objects的全部?jī)?nèi)容 需要注意的一點(diǎn): B中不能含有table b.objects否則語(yǔ)句可以執(zhí)行,但是執(zhí)行select操作時(shí)顯示的仍然為b.objects的內(nèi)容,需要先把.objects刪除掉,重新建立synonym即可。 刪除同義詞 使用DROP SYNONYM語(yǔ)句刪除不再需要的同義詞 要想刪除私有同義詞 就省略 PUBLIC 關(guān)鍵字; 要想刪除公共同義詞 就要包括PUBLIC 關(guān)鍵字 DROP SYNONYM emp; 刪除名為emp 的私有同義詞 DROP PUBLIC SYNONYM public_emp; 刪除名為public_emp的公有同義詞 -------------------------------------------------- |
|
來(lái)自: mac_tom > 《Oracle_Foundation》