博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle对象之视图
阅读量:5781 次
发布时间:2019-06-18

本文共 4632 字,大约阅读时间需要 15 分钟。

视图
     视图可以认为是为了方便查询所形成的表
     视图并没有存储实际的数据
视图是表中数据的逻辑表示。视图本身并不存储任何数据(这就是视图和表最直接的差别),而真正的数据是存在于基表中的。视图也和表一样,也带有名称的列和行。简单的说,视图就是一个展示的窗口,它可以从这个表拿点数据,从另一个表拿点数据,进行展示。这样一来,就不用建立一个新的表,就节省了空间。
 
对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。
但是我们一般不建议通过修改视图来修改数据。
 
 
 
如果不能创建可能是因为权限问题
更换用户或者授权即可。
 

视图的基本语法:

CREATE[OR REPLACE][FORCE][NOFORCE]VIEW view_name[(column_name)[,….n]]ASSelect_statement[WITH CHECK OPTION[CONSTRAINT constraint_name]][WITH READ ONLY]说明:view_name :  视图的名字column_name: 视图中的列名

在下列情况下 , 必须指定视图列的名称

* 由算术表达式 , 系统内置函数或者常量得到的列

* 共享同一个表名连接得到的列

* 希望视图中的列名与表中的列名不同的时候

 

REPLACE:  如果创建视图时, 已经存在此视图, 则重新创建此视图, 相当于覆盖

FORCE:  强制创建视图, 无论的视图所依赖的基表否存在或是否有权限创建

NOFORCE:  只有基表存在且具有创建视图权限时, 才可以创建视图

WITH CHECK OPTION  指出在视图上所进行的修改都要符合select_statement 所指定的限制条件

WITH READ ONLY  只允许查看视图

 

视图的定义原则: 

       1. 视图的查询可以使用复杂的 SELECT 语法,包括连接 / 分组查询和子查询; 
       2. 在没有 WITH CHECK OPTION 和 READ ONLY的情况下,查询中不能使用 
          ORDER BY子句; 
       3. 如果没有为 CHECK OPTION 约束命名,系统会自动为之命名,形式为 SYS_Cn;
       4. OR REPLACE 选项可以不删除原视图便可更改其定义并重建,或重新授予对象 
         权限。

1. 查询视图: 可依赖于多个基表.

SELECT  * FROM view_name; /* 类似于查询表数据*/

 

2. 更新视图的前提:

没有使用连接函数, 集合运算和组函数. 创建视图的select 语句中没有集合函数且没有GROUP BY,ONNECT BY ,START WITH 子句及DISTINCT 关键字. 创建视图的SELECT 语句中不包含从基表列通过计算所得的列. 创建视图没有包含只读属性.

 

3. 插入数据

INSERT  INTO  view_name VALUES();

 

4. 修改数据:

UPDATE  view_name SET …

若一个视图依赖于多个基本表, 则一次修改该视图只能修改一个基本表的数据.

 

5. 删除数据:

Delete from view_name where …

同样, 当视图依赖多个基表时, 不能使用此语句来删除基表中的数据. 只能删除依赖一个基表的数据.

 

6. 修改视图定义:

修改视图的好处在于, 所有相关的权限都依然存在. 语法同创建视图相同.

 

7. 删除视图:

DROP VIEW view_name;

  只有视图所有者和具备DROP VIEW 权限的用户可以删除视图。删除视图的定义不影响基表中的数据。视图被删除后,基于被删除视图的其他视图或应用将无效。

 

创建视图SQL> create view empinfoview  2  as  3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname  4  from emp e, dept d  5  where e.deptno=d.deptno; 创建视图为只读,加上with read onlySQL> create view empinfoview  2  as  3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname  4  from emp e, dept d  5  where e.deptno=d.deptno;     WITH READ ONLY; 创建或者替代原有视图SQL> create or replace view empinfoview  2  as  3  select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname  4  from emp e, dept d  5  where e.deptno=d.deptno  6  with read only; 显示视图结构   SQL> desc empinfoview  查看视图SQL> select * from empinfoview;      EMPNO ENAME             SAL     ANNSAL DNAME                                                                                                                                                       ---------- ---------- ---------- ---------- --------------                                                                                                                                                   7369 SMITH             800       9600 RESEARCH                                                                                                                                                         7499 ALLEN            1600      19200 SALES                                                                                                                                                             7521 WARD             1250      15000 SALES                                                                                                                                                             7566 JONES            2975      35700 RESEARCH                                                                                                                                                         7654 MARTIN           1250      15000 SALES                                                                                                                                                             7698 BLAKE            2850      34200 SALES                                                                                                                                                             7782 CLARK            2450      29400 ACCOUNTING                                                                                                                                                       7788 SCOTT            3000      36000 RESEARCH                                                                                                                                                         7839 KING             5000      60000 ACCOUNTING                                                                                                                                                       7844 TURNER           1500      18000 SALES                                                                                                                                                             7876 ADAMS            1100      13200 RESEARCH

 

 

转载于:https://www.cnblogs.com/anzhi/p/7515816.html

你可能感兴趣的文章
从根本解决跨域(nginx部署解决方案)
查看>>
javascript实现的一个信息提示的小功能/
查看>>
Centos7.x:开机启动服务的配置和管理
查看>>
HTML5 浏览器返回按钮/手机返回按钮事件监听
查看>>
xss
查看>>
iOS:百度长语音识别具体的封装:识别、播放、进度刷新
查看>>
JS获取服务器时间并且计算距离当前指定时间差的函数
查看>>
华为硬件工程师笔试题
查看>>
jquery居中窗口-页面加载直接居中
查看>>
cd及目录快速切换
查看>>
Unity Shaders and Effects Cookbook (3-5) 金属软高光
查看>>
31-hadoop-hbase-mapreduce操作hbase
查看>>
C++ 代码风格准则:POD
查看>>
linux-友好显示文件大小
查看>>
【转】【WPF】WPF中MeasureOverride ArrangeOverride 的理解
查看>>
【转】二叉树的非递归遍历
查看>>
NYOJ283对称排序
查看>>
接连遇到大牛
查看>>
[Cocos2d-x For WP8]矩形碰撞检测
查看>>
自己写spring boot starter
查看>>