1,视图概念:
视图是一个逻辑结构,本身不包含任何数据,是一个可命名的select语句。 透过视图可以看到底层数据,但是视图和数据是相互独立的。
2,创建视图需要有DBA权限。
3,语法: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; 视图已创建。
SQL> create view testview3
2 as 3 select * from test3; create view testview3 * 第 1 行出现错误: ORA-00955: 名称已由现有对象使用 修改视图:
SQL> create or replace view testview3
2 as 3 select * from test3; 视图已创建。
5,force 表示若表不存在则强制创建视图; 如:SQL> create view tt
2 as 3 select * from tt; create view tt * 第 1 行出现错误: ORA-01731: 出现循环的视图定义 SQL> create force view tt 2 as 3 select * from tt; 警告: 创建的视图带有编译错误。
6,查看视图结构:
SQL> desc testview3;
名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER(38) LNAME VARCHAR2(20) FNAME VARCHAR2(20) 7,在使用聚合函数创建视图时,需制定别名;
SQL> create view testview4
2 as 3 select id,sum(id) from test3 4 group by id; select id,sum(id) from test3 * 第 3 行出现错误: ORA-00998: 必须使用列别名命名此表达式 SQL> create view testview4 2 as 3 select id,sum(id) test3_id from test3 4 group by id; 视图已创建。
===========================
***************************
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 ----通过更新视图,更新了视图检索的数据,同时更新了基本表中的数据: 1. select * from testview3
2. select * from count1
---------------------------------
对另一个数据对象而言同义词是一个别名。public同义词是针对所有用户的,相对而言private同义词则只针对对象拥有者或被授予权限的账户。
在本地数据库中同义词可以表示表、视图、序列、程序、函数或包等数据对象,也可以通过链接表示另一个数据库的对象。 ------------------------------
1.创建同义词语句:
其中第一个table_name和第二个table_name可以不一样。 此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link; 当然,你可能需要在user用户中给当前用户(user2)授权: grant select/delete/update on user2 2.删除同义词:
3.查看所有同义词:
同义词拥有如下好处:
节省大量的数据库空间,对不同用户的操作同一张表没有多少差别; 扩展数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;
同义词可以创建在不同的数据库服务器上,通过网络实现连接。
-------------------------------------------------
问题描述:
有两个oralce实例 SID分别为 A B A中a用户下含有表objects B中有b用户 使在B中用b用户登录后执行 select * from objects 能显示出A中a.objects的全部内容 问题解答: 用b用户登录到B中,执行: create public synonym objects for a.objects@A 此时执行select * from objects 就能显示出a.objects的全部内容 需要注意的一点: B中不能含有table b.objects否则语句可以执行,但是执行select操作时显示的仍然为b.objects的内容,需要先把.objects删除掉,重新建立synonym即可。 删除同义词 使用DROP SYNONYM语句删除不再需要的同义词 要想删除私有同义词 就省略 PUBLIC 关键字; 要想删除公共同义词 就要包括PUBLIC 关键字 DROP SYNONYM emp; 删除名为emp 的私有同义词 DROP PUBLIC SYNONYM public_emp; 删除名为public_emp的公有同义词 -------------------------------------------------- |
|
来自: mac_tom > 《Oracle_Foundation》