Oracle中如何建视图
Oracle中创建视图
Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。
视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。
视图是存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或组合。
视图的优点:
1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
2.用户通过简单的查询可以从复杂查询中得到结果。
3.维护数据的独立性,试图可从多个表检索数据。
4.对于相同的数据可产生不同的视图。
视图分为简单视图和复杂视图:
简单视图只从单表里获取数据
复杂视图从多表
简单视图不包含函数和数据组
复杂视图包含
简单视图可以实现DML操作
复杂视图不可以.
视图的创建:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
其中:
OR REPLACE :若所创建的试图已经存在,ORACLE自动重建该视图;
FORCE :不管基表是否存在ORACLE都会自动创建该视图;
NOFORCE :只有基表都存在ORACLE才会创建该视图:
alias :为视图产生的列定义的别名;
subquery :一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION :
插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY :
该视图上不能进行任何DML操作。
例如:
CREATE OR REPLACE VIEW dept_sum_vw
(name,minsal,maxsal,avgsal)
AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname;
视图的定义原则:
1.视图的查询可以使用复杂的SELECT语法,包括连接/分组查询和子查询;
2.在没有WITH CHECK OPTION和 READ ONLY 的情况下,查询中不能使用
ORDER BY 子句;
3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn;
4.OR REPLACE选项可以不删除原视图便可更改其定义并重建,或重新授予对象
权限。
视图的查询:
视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。
还可以查询视图的全部信息和指定的数据行和列。
如:
检索数据:
SQL>SELECT * FROM dept_sum_vw;
查询视图定义:
SELECT view_name,text from user_views;
其中text显示的内容为视图定义的SELECT语句,可通过DESC USER_VIEWS
得到相关信息。
修改视图:
通过OR REPLACE 重新创建同名视图即可。
视图上的DML 操作:
DML操作应遵循的原则:
1.简单视图可以执行DML操作;
2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能
删除数据行;
3.在视图不出现下列情况时可通过视图修改基表数据或插入数据:
a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字;
b.使用表达式定义的列;
c.ROWNUM伪列。
d.基表中未在视图中选择的其他列定义为非空且无默认值。
视图可用于保持数据库的完整性,但作用有限。
通过视图执行引用完整性约束可在数据库级执行约束。
WITH CHECK OPTION 子句限定:
通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行,
因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。
例如:
CREATE OR REPLACE VIEW vw_emp20
AS SELECT * FROM emp
WHERE deptno=20
WITH CHECK OPTION constraint vw_emp20_ck;
视图 已建立。
查询结果:
SELECT empno,ename,job FROM vw_emp20;
EMPNO ENAME JOB
--------------------- -------------- -------------
7369 SMITH CLERK
7566 JONES MANAGER
7902 FORD ANALYST
修改:
UPDATE vw_emp20
SET deptno=20
WHERE empno=7902;
将产生错误:
UPDATE vw_emp20
*
ERROR 位于第一行:
ORA-01402:视图WITH CHECK OPTION 违反WHERE 子句
视图的删除:
DROP VIEW VIEW_NAME语句删除视图。
删除视图的定义不影响基表中的数据。
只有视图所有者和具备DROP VIEW权限的用户可以删除视图。
视图被删除后,基于被删除视图的其他视图或应用将无效。
[create_time]2012-07-19 18:34:20[/create_time]2012-07-20 08:28:17[finished_time]3[reply_count]19[alue_good]xlllzx[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.70f4433e.AXXGQncLmce4hIe7HTqMHA.jpg?time=3164&tieba_portrait_time=3164[avatar]超过17用户采纳过TA的回答[slogan]这个人很懒,什么都没留下![intro]10840[view_count]
oracle不同视图间的区别
关系视图:Oracle视图是作为数据库对象存在的,因此,创建之后也可以通过工具或数据字典来查看视图的相关信息。这是大家常用的视图
如:create view 视图名称 as 查询语句|关系运算
内嵌视图:在from语句中的可以把表改成一个子查询,如:select a.id ,b.id from emp a,(select id from dept) b where a.id=b.id内嵌视图不属于任何用户,也不是对象,内嵌视图是子查询的一种,可以与数据表、视图一样作为查询语句的数据源存在,但在形式上有较大的区别,内嵌视图不必使用create view命令进行创建,因此,在数据字典中也无法获得相应信息。内嵌视图的特点在于无须创建真正的数据库对象,而只是封装查询,因此会节约数据库资源,同时不会增加维护成本。但是内嵌视图不具有可复用性,因此当预期将在多处调用到同一查询定义时,还是应该使用关系视图。
对象视图:对象类型在数据库编程中有许多好处,但有时,应用程序已经开发完成。为了迎合对象类型而重建数据表是不现实的。对象视图正是解决这一问题的优秀策略。
对象视图创建之后,同样可以在数据字典中获得其相应信息。利用Oracle内置视图user_views可以获得对象视图相关信息。Oracle中的对象数据实际仍然以关系数据的形式存储。但是,对象的特性,例如继承、封装等,都为开发人员提供了更加灵活的处理形式。同样,可以构造复杂的对象类型来封装复杂的多表查询。
物化视图:常用于数据库的容灾,不是传统意义上虚拟视图,是实体化视图,和表一样可以存储数据、查询数据。主备数据库数据同步通过物化视图实现,主备数据库通过data link连接,在主备数据库物化视图进行数据复制。当主数据库垮掉时,备数据库接管,实现容灾
[create_time]2011-05-17 00:30:05[/create_time]2011-05-17 16:07:03[finished_time]1[reply_count]8[alue_good]llsh2009[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.8f24a554.xORnsHjJeDQX-4nJwvxz6Q.jpg?time=3241&tieba_portrait_time=3241[avatar]TA获得超过3170个赞[slogan]这个人很懒,什么都没留下![intro]1559[view_count]
数据库ORACLE中如何创建可以插入数据的视图?
1、视图(View)创建使用,视图(View)实际上是一张或者多张表上的预定义查询,这些表称为基表。从视图中查询信息与从表中查询信息的方法完全相同。只需要简单的SELECT?FROM即可。2、OR REPLACE:如果视图已经存在,则替换旧视图。3、FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。4、NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。5、 WITH READ ONLY:默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。视图具有以下优点:可以限制用户只能通过视图检索数据。这样就可以对最终用户屏蔽建表时底层的基表。可以将复杂的查询保存为视图。可以对最终用户屏蔽一定的复杂性。 限制某个视图只能访问基表中的部分列或者部分行的特定数据。这样可以实现一定的安全性。从多张基表中按一定的业务逻辑抽出用户关心的部分,形成一张虚拟表。
[create_time]2022-12-11 21:09:44[/create_time]2022-12-26 21:09:44[finished_time]1[reply_count]0[alue_good]惠企百科[uname]https://pic.rmb.bdstatic.com/bjh/user/343825d09bee196abf9cec8955c23e80.jpeg[avatar]百度认证:北京惠企网络技术有限公司官方账号[slogan]惠企百科网是一家科普类综合网站,关注热门中文知识,集聚互联网精华中文知识,本着自由开放、分享价值的基本原则,向广大网友提供专业的中文知识平台。[intro]183[view_count]oracle中视图可以创建索引吗?
oracle中视图可以创建索引,创建索引方法为:1、打开Navicat。2、右击oracle数据库,然后点击【打开连接】。3、点击【其它】,然后点击【索引】,此时显示oracle数据库中所有的索引。4、点击【新建索引】,进入索引设计界面。5、在【常规】标签页,设置类型、表格式、表名、列名等。6、在【高级】标签页,设置表空间、记录等选项。7、点击【保存】,输入索引名称,然后点击【确定】。
[create_time]2019-07-05 16:55:25[/create_time]2011-10-16 15:27:09[finished_time]7[reply_count]6[alue_good]刺友互[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.1d725742.2dsazuszWBxcRWxgtFX_lg.jpg?time=4872&tieba_portrait_time=4872[avatar]每个回答都超有意思的[slogan]这个人很懒,什么都没留下![intro]46979[view_count]数据字典视图及其用途(ORACLE数据库)求助各位大神,!
数据字典
是元数据的集合,从逻辑上和物理上描述了数据库及内容,存储于SYSTEM与SYSAUX表空间内的若干段。
SYS用户拥有所有的数据字典表,数据字典基本一般以$结尾,如col$,tab$等,这些数据字典存放在system表空间中。
数据字典的形成
在数据库创建阶段创建,在使用阶段维护和更新
无法通过DML操作来修改,只能通过相关的命令修改系统,来达到间接修改数据字典。
数据字典的特点
每个Oracle数据库的中枢
描述数据库和它的对象
包含只读的表和视图
存储在SYSTEM表空间中
拥有者是SYS用户
由Oracle服务器自己维护
用SELECT访问
数据字典内容:
数据字典提供下列信息:
逻辑和物理的数据库结构
对象的定义和空间分配
一致性限制
用户
角色
权限
审计
数据字典的主要用途:
Oracle服务器用它查找下列信息:
用户
对象
存储结构
Oracle服务器修改数据字典当DDL语句执行的时候.
用户和管理员们利用它了解数据库的信息.
基础表和数据字典视图:
数据字典包括两个部分:
基础表
存储数据库的描述
CREATE DATABASE命令创建(sql.bsq)
数据字典视图
用于简化基础表的信息
通过PUBLIC同义词访问
由脚本catalog.sql创建
数据字典基表中的数据很难看懂。因此,很少人直接访问这些基表。取而代之的是数据字典视图。
数据字典视图分为类,它们以前辍来区分,前辍分别为:USER、ALL、DBA
USER_* 用户所拥有的对象信息
ALL_* 用户能访问的对象信息
DBA_* 整个数据库中的对象信息
创建数据字典视图:
建库后,运行以下脚本创建的
$ORACLE_HOME/rdbms/admin/catalog.sql 创建常用的数据字典和同义词
$ORACLE_HOME/rdbms/admin/catproc.sql 创建内建的存储过程、包等pl/sql对象
DBCA建库时会自动运行这两个脚本,但如果手动建库的话,需手动运行。
常用的数据字典:
一般的概况: TAB,DICTIONARY, DICT_COLUMNS
对象: DBA_TABLES, DBA_INDEXES, DBA_TAB_COLUMNS, DBA_CONSTRAINTS --->user_ ,all_
空间分配: DBA_SEGMENTS, DBA_EXTENTS
数据库结构: DBA_TABLESPACES, DBA_DATA_FILES
动态性能视图:
是将内存里的数据或控制文件里的数据以表的形式展现出来,它们实际都是虚拟表,并不是真正的表
只要数据库在运行,就会不断更新动态性能视图
一旦数据库关闭或崩溃,则动态性能视图里的数据就丢失,当数据库重新启动后,数据将会被更新
所有的动态性能视图名称都存放在v$fixed_table里。这些动态性能视图都是以V_$开头,属主是sys
oracle为每个动态性能视图都创建了同义词,同义词将中间的“_”去掉了,形成以v$开头
常用的数据字典视图、动态性能视图:
dba_objects
dba_tables
dba_users
dba_tablespaces
V$CONTROLFILE 控制文件信息
V$DATABASE 数据库信息
V$DATAFILE 数据文件信息
V$INSTANCE 实例信息
V$PARAMETER 参数信息
V$SESSION 会话信息
V$SGA SGA信息
V$SGAINFO SGA信息
V$TABLESPACE 表空间信息
V$THREAD
V$VERSION
V$option
v$parameter显示的是session级的参数,也就是当前session的参数信息。
如果没有使用alter session单独设置当前session的参数值,那么默认和system级的参数应该是一样的。
v$system_parameter显示的是system级的参数,保存的是使用alter system修改的值(scope=both或者scope=memory)。
上面两个都是当前已经生效的参数值。对于使用spfile的库,也可以暂时只修改spfile中的
值。v$spparameter显示的就是保存在spfile中的参数值(scope=spfile)。
[create_time]2012-12-28 23:06:50[/create_time]2013-07-27 10:33:58[finished_time]1[reply_count]4[alue_good]whmng[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.1e2d67af.tRtilnU8ktfT5Kque-dMQg.jpg?time=3144&tieba_portrait_time=3144[avatar]TA获得超过663个赞[slogan]这个人很懒,什么都没留下![intro]973[view_count]
oracle 视图sql语句怎么写
方法和详细的操作步骤如下:1、第一步,通过pl / sql登录到oracle数据库,见下图,转到下面的步骤。2、第二步,完成上述步骤后,输入sql以查询该库的所有视图,elect * from all_views t,并要求所有者在结果中代表不同的用户,见下图,转到下面的步骤。3、第三步,完成上述步骤后,如果查看用户的所有视图,执行sql,select * from user_views t,可以看到用户尚未创建视图,见下图,转到下面的步骤。4、第四步,完成上述步骤后,如果要查看库,则执行sql,代码见下图。这样,就解决了这个问题了。
[create_time]2020-05-09 18:57:20[/create_time]2011-06-24 18:59:12[finished_time]6[reply_count]3[alue_good]59分粑粑分享生活[uname]https://pic.rmb.bdstatic.com/bjh/user/f9890bf2651858289fcf9877a50593d3.jpeg[avatar]咨询师[slogan]专注生活好物分享,解答日常方方面面的问题[intro]15222[view_count]Oracle中视图和同义词的区别
Oracle中视图和同义词的区别如下:
视图和同义词分别都是数据库中的对象名称,它们都不对应实际的数据存储,都依赖其他对象的存在而存在。
一、视图:视图可以被看成是虚拟表或存储查询。除非是索引视图,否则视图的数据不会作为非重复对象存储在数据库中。一般是基于一个或多个数据表经数据查询语句构建而成;视图可以再被用于数据查询语句中。
二、同义词:是架构范围内的对象的另一名称。通过使用同义词,客户端应用程序可以使用由一部分组成的名称来引用基对象,而不必使用由两部分、三部分或四部分组成的名称。可以理解为是对数据库中一个对象的快捷方式或者在特定范围内的别名;不限于数据表,几乎所有的数据库对象都可以建立同义词。
1.视图可以对应一张或多张表,同义词只能对应一张表名称
2.视图可以设置其他约束条件
3.可以在同义词上建立视图:
例如,已经存在一个名为synonym_city的同义词和一个名为table_citys的表,可以创建视图:CREATE
OR
REPLACE
NOFORCE
VIEW
view_city
AS
SELECT
*
FROM
synonym_city,table_citys;
4.可以通过对同义词进行任何DML操作,对表数据进行插入、更新、删除,通过对视图只能进行更新和删除操作。
值得注意的是:视图和同义词都可以屏蔽用户访问其他用户拥有的表。
例如:现在存在两个用户:scott、sys,以sys用户登录
创建跨用户表的同义词:
CREATE
OR
REPLACE
PUBLIC
SYNONYM
SYN_EMP
for
scott.emp;
创建跨用户的表的视图:
CREATE
OR
REPLACE
VIEW
view_EMP
AS
SELECT
*
FROM
scott.emp
然后进行查询操作:
SELECT
*
FROM
SYN_EMP
;
SELECT
*
FROM
view_EMP
;
查询结果是一样的。
[create_time]2020-04-06 10:41:01[/create_time]2019-01-28 23:36:34[finished_time]1[reply_count]0[alue_good]摩绿善成礼[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.686324c2.ybgSeMaaF2GecnA7HM3mWg.jpg?time=10702&tieba_portrait_time=10702[avatar]TA获得超过3593个赞[slogan]这个人很懒,什么都没留下![intro]64[view_count]