玩技术,Geeker
一个原创技术文章分享网站

Oracle学习笔记——视图

该死的报表

这几天每天被该死的报表折腾死了,简直就是折磨。自己刚接手这块业务时间不长,发现以前的人挖的坑,在报表这里就各种体现,为了一个简单的报表,要填各种各样的坑。先来说一下我们这里做报表的方法吧。

  1. 在各种业务流程中,会记录各种日志,不同的日志记录到数据库不同的表中;
  2. 然后从不同的表中,取得关联的各种数据,以报表的形式展现数来;
  3. 从不同的关联表中取得的数据可以插入一个新的表中,也可以组成一个视图;
  4. 最后报表工具从这个新的表,或者视图中取的最终的数据(给各个老板看的数据)。

可以看到,如果哪个日志表中记录的数据不对,或者哪个日志表中缺少了需要的数据,这就坑爹了,那这个报表还让人怎么做。而我需要完成的任务就是写存储过程,将各种表中的数据取出来,放到一个新的表中,或者组成一个视图。

视图?对于Oracle中的视图,我感到好陌生,于是写下这篇文章,对Oracle中的视图进行简单的总结。

啥是视图?

视图是表中数据的逻辑表示。视图本身并不存储任何数据(这就是视图和表最直接的差别),而真正的数据是存在于基表中的。视图也和表一样,也带有名称的列和行。简单的说,视图就是一个展示的窗口,它可以从这个表拿点数据,从另一个表拿点数据,进行展示。这样一来,就不用建立一个新的表,就节省了空间。

创建视图

创建视图的语句就那么几个关键字,比较简单,下面就通过我工作中的一个例子进行说明。

从营销计划表中取得所有的状态为1的数据,组成一个名为v_valid_plans的视图。SQL语句如下:

CREATE VIEW v_valid_plans AS
SELECT * 
FROM ivr_marketing_plan
WHERE status=1;

CREATE VIEW是创建视图的关键字,后面跟的是视图的名字,对于视图,我一般都是以v_开头的形式命名;AS之后指定的是查询语句,表示从基表中获得需要的数据。这个查询语句可以是单表查询,也可以是多表查询,甚至可以从其它视图中获取数据,这样就出现了在视图上再创建视图的情况。

在很多时候,对于视图,我们就是把它当做一个数据展示的窗口,并不想对视图直接进行操作,所以,一般我们都是建立一个只读的视图。例如:

CREATE VIEW v_valid_plans AS
SELECT * 
FROM ivr_marketing_plan
WHERE status=1
WITH READ ONLY;

加上WITH READ ONLY选项,就表示创建的视图是只读的。

使用视图

一般情况下,也就是大多数情况下,我们建立的视图都是只读的,就是为了查询数据,通过视图,我们就可以访问基表中的数据了。就像对基表查询那样。例如:

SELECT * FROM v_valid_plans;

这就是查询v_valid_plans视图中展示的所有数据。

看看创建视图的原始语句

对于我来说,见到一个对象,比如:表、视图、存储过程等,我都想去看看它的定义是什么样子的。不知道你们是不是这样的?探索欲望太强烈的,不去搞清楚它的定义,我用的都不放心。那么如何使用SQL命令查看视图的定义呢?

使用以下语句就能得到指定用户,指定视图的定义:

SET SERVEROUTPUT ON;
SET LONG 100000;

SET SERVEROUTPUT ON;即打开Oracle自带的输出方法DBMS_OUTPUT方法;SET LONG 100000;设置LONG类型缓冲区;而真正获得视图定义的是下面的语句:

SELECT DBMS_METADATA.GET_DDL('VIEW', 'V_TB_STUDENT', 'JELLY') FROM DUAL;

GET_DDL函数用来获取各种对象的定义,第一个参数表示获取视图的定义;第二个参数是指定的视图名;第三个参数指定的是用户名。

视图名和用户名必须大写,否则就无法获得定义。

调用完成以后,就会输出V_TB_STUDENT视图的定义:

CREATE OR REPLACE FORCE VIEW "JELLY"."V_TB_STUDENT" ("ID", "NAME", "SEX", "AGE") AS select "ID","NAME","SEX","AGE" from jelly.tb_student with read only;

删除视图

如果觉的这个视图有点碍眼,有点多余,或者说看的不爽,没问题,直接干掉就好了。

DROP VIEW V_TB_STUDENT;

删除视图的时候,如果视图上存在参照完整性约束的引用,就无法删除视图,需要使用选项CASCADE CONSTRAINTS,此时就会连参照完整性约束会被一起删除掉。

总结

以后的工作中,至少知道了视图这么个东西,在脑子里有视图这个概念,能够知道视图是个什么东西就好了,不要轻易的被别人鄙视,特别是做技术的。你懂的~~~

2015年5月28日 于呼和浩特。

打赏

未经允许不得转载:果冻想 » Oracle学习笔记——视图

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

在这里玩技术,享受技术带来的疯狂

捐赠名单关于果冻