WEB开发网
开发学院数据库Oracle Oracle数据库入门之DDL与数据库对象 阅读

Oracle数据库入门之DDL与数据库对象

 2012-11-28 15:27:55 来源:WEB开发网   
核心提示:可以通过在create view语句中嵌入子查询的方式创建视图创建:create [or replace] view [schema.]view [(alias[,aliasx]...)] as subquery;举例:create or replace view v1(编号,姓名,工资) as select empn
可以通过在create view语句中嵌入子查询的方式创建视图
创建:create [or replace] view [schema.]view [(alias[,aliasx]...)] as subquery;
举例:create or replace view v1(编号,姓名,工资) as select empno,ename,sal from emp where deptno=20;
建议在创建视图时加上or replace,即如果存在重名视图,则替换掉重名视图
而且不允许在括号中列出字段类型,因为具体的字段类型由子查询的结果决定
强调:可用force选项强制创建视图。即无论预期中的字段或基表是否存在,都要强制创建视图
也就是先给出一个视图的定义。但此时不能对这个连基表都不存在的视图进行查询,原因不言自明
语法为create [or replace] [force|noforce] view [schema.]view [(alias[,aliasx]...)] as subquery;
比如create or replace force view v2 as select empno,ename,job,sal from emp2 where deptno=20;
假定此时不存在emp2表,当然这些字段存不存在就无从谈起了,如果不使用force选项,肯定无法创建视图
缺省为不强制(即noforce)创建视图。实际上不建议强制创建视图
查询:和查询表数据一样,可以使用select * from v1;来查询视图中的数据
它的实现细节是这样的,当数据库服务器接收到应用程序或SQLPlus等客户端软件发送过来的查询视图的指令的时候
首先会在当前方案下寻找名字叫v1的视图定义,即定义视图的create语句,也就是create or replace view v1...
找到v1的定义之后,便执行定义中的子查询,再把查询的结果返回给客户端
这意味着每次引用或者访问视图的时候,都会执行一次子查询,都会查一下底层的物理表
所以物理表中的任何数据更新,都会立即在视图的查询中体现出来
续一:可以用desc v1查看视图结构。可以用drop view v1删除视图
所谓的临时表是在程序运行的过程中,根据需要而临时创建的一张表。通常是利用create table创建临时表
临时表只是临时用到它,用完了便删除。类似于临时文件,但临时表所保存的是真正的数据,这跟虚拟表不同
续二:创建视图的时候,也可以不指定字段名。缺省视图的字段属性都与子查询结果中的字段属性相同
若子查询中使用了别名,视图则采用别名作为它的字段名。而且子查询中的表达式或函数不允许作为视图的字段名
续三:实际上视图的定义和表的定义一样,都应该在应用程序开发的时候,在数据库设计阶段就确定下来它们数目个功能
即创建一定数量的表,以保存最底层基础的数据。并设定好哪些数据需要以视图的方式交由具体的程序模块去使用
复杂:也可以创建复杂视图,也就是说子查询还可以复杂一些
如果某业务经常需要查询统计信息,那么只需要创建一个这样的视图就可以了,而不必每次都执行子查询以获得数据
比如create or replace v_emp(工号,姓名,职位,年薪,工龄(月),部门编号,部门名称,)
as select empno, ename, job, sal*12, month_between(sysdate,hiredate), emp.deptno, dname
from emp, dept where emp.deptno=dept.deptno;
更新:在可更新视图上进行DML操纵,可以修改基表中的数据。语法与在表上操作相同,分别为insert、update、delete语句
可更新视图的定义中不能使用分组函数、group by子句、distinct关键字、rownum伪列,而且字段的定义不能为表达式
由两个以上基表中导出的视图不可更新。基表中非空的列在视图定义中未包括,则不可在视图上进行insert操作
这种操作很容易出错,实际上在真实的开发中很少这么做,也不建议通过视图去更新底层数据
只读:在创建视图时,可使用with read only选项将之设置为只读
语法为create [or replace] view [schema.]view [(alias[,aliasx]...)] as subquery [with read only];

上一页  1 2 3 4 5 6 7  下一页

Tags:Oracle 数据库 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接