1、视图的介绍和使用

       表和视图的区别,表是占用硬盘空间物理表,而视图可以理解为一个虚表,并不存储在硬盘上,

不占用硬盘空间,实际上就是一个查询语句,方便查询。

       对视图里面的数据操作(增 删 改) 其实就是对真实的表 增 删 改, 它们始终保持一致性。

       哪为什么还需要视图 ?

       视图可以理解成一个封装过的表, 例如不让用户 清楚知道表的某些字段信息,比较安全。

===========


下面进行操作 演示



CREATE TABLE xue_sheng( id integer, xing_ming varchar(25),xing_bie number, fen_shu number, b_id integer);


INSERT INTO xue_sheng VALUES(1,'ZhanSan',1,80,1);


INSERT INTO xue_sheng VALUES(2,'LiSi',1,90,2);


INSERT INTO xue_sheng VALUES(3,'ZhanHong',0,75,2);


INSERT INTO xue_sheng VALUES(4,'ChenXiaoMing',1,85,1);


增加一个视图:

SQL> CREATE VIEW xs_view AS SELECT * FROM xue_sheng;

CREATE VIEW xs_view AS SELECT * FROM xue_sheng

           *

ERROR at line 1:

ORA-01031: insufficient privilegesscott  没有创建视图的权限


更改用户为sysdba

----------------------------------

SQL> conn /as sysdba

Connected.

SQL> grant connect,dba to scott;    赋予权限;

Grant succeeded.


SQL> conn scott/tiger

Connected.


SQL> CREATE VIEW xs_view AS SELECT * FROM xue_sheng;

View created.


------------------------------

#对比表和视图,一模一样

Linux 环境下Oracle安装与调试(四)之视图、存储过程

#插入一条数据可以发现,对视图增删改,就是对表增删改;

Linux 环境下Oracle安装与调试(四)之视图、存储过程


#设置视图权限

CREATE OR REPLACE 的使用 和 设置视图的权限 WITH READ ONLY 只读

如果视图不存在,则创建视图;如果视图存在则替换视图;

修改原来的视图, 其实就是做一个替换

修改视图为只读权限

CREATE OR REPLACE VIEW xs_view AS SELECT * FROM xue_sheng WITH READ ONLY;

Linux 环境下Oracle安装与调试(四)之视图、存储过程

提示这是一个 read-only view 只读的视图


#创建一个带条件的视图

Linux 环境下Oracle安装与调试(四)之视图、存储过程


#再增加一个班级表

CREATE TABLE ban_ji( id integer , ban_ji varchar(25));


INSERT INTO ban_ji VALUES(1,'1-(1)');


INSERT INTO ban_ji VALUES(2,'1-(2)');


INSERT INTO ban_ji VALUES(3,'1-(3)');


建立一个简单的视图, 取代复杂的查询语句,创建一个视图用于临时存放查询结果,而且以后需要对查询的结果反复操作;

CREATE OR REPLACE VIEW xs_view AS SELECT x.id, xing_ming,ban_ji FROM xue_sheng x JOIN ban_ji b ON x.b_id=b.id;


SELECT * FROM xs_view;


显示视图的字段和数据类型

DESC xs_view;

Linux 环境下Oracle安装与调试(四)之视图、存储过程


2、存储过程

#定义

存储过程 - 执行一个任务,该任务包括了一系列的PL SQL语句,存储在数据库中,成为数据库一个对象。效率比较高的,但你创建一个存储过程它会进行一个判断编译的

#创建一个简单的存储过程,这个存储过程什么都不操作,NULL表示;


Linux 环境下Oracle安装与调试(四)之视图、存储过程

is:声明一些变量;

#执行存储过程;

Linux 环境下Oracle安装与调试(四)之视图、存储过程

以上2中方法执行存储过程,如果没有什么输出参数可以用第一种execute xs_proc;如果有输出参数,最好用第2中方法;


#存储过程显示信息

Linux 环境下Oracle安装与调试(四)之视图、存储过程

输出要设置为ON , 才会把 hello 显示出来


#存储过程实例

CREATE TABLE xue_sheng( id integer, xing_ming varchar(25), yu_wen number,shu_xue number);


INSERT INTO xue_sheng VALUES(1,'ZhanSan',80,90);


INSERT INTO xue_sheng VALUES(2,'LiSi',85,87);

只带一个输入参数 ,把查询的结果显示出来

Linux 环境下Oracle安装与调试(四)之视图、存储过程

当输入学生的名字, 就会把他的总分(语文+数学)显示出来。

Linux 环境下Oracle安装与调试(四)之视图、存储过程


#输入参数 和 输出参数一起使用

Linux 环境下Oracle安装与调试(四)之视图、存储过程

Linux 环境下Oracle安装与调试(四)之视图、存储过程


#维护存储过程


  1、查看过程状态


    SELECT object_name,status FROM USER_OBJECTS WHERE object_type='PROCEDURE';


  2、重新编译过程


    ALTER PROCEDURE xs_proc COMPILE;


  3、查看过程的源代码


    SELECT * FROM USER_SOURCE WHERE TYPE='PROCEDURE';


  4、删除存储过程


    DROP PROCEDURE xs_proc;