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.
------------------------------
#对比表和视图,一模一样
#插入一条数据可以发现,对视图增删改,就是对表增删改;
#设置视图权限
CREATE OR REPLACE 的使用 和 设置视图的权限 WITH READ ONLY 只读
如果视图不存在,则创建视图;如果视图存在则替换视图;
修改原来的视图, 其实就是做一个替换
修改视图为只读权限
CREATE OR REPLACE VIEW xs_view AS SELECT * FROM xue_sheng WITH READ ONLY;
提示这是一个 read-only view 只读的视图
#创建一个带条件的视图
#再增加一个班级表
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;
2、存储过程
#定义
存储过程 - 执行一个任务,该任务包括了一系列的PL SQL语句,存储在数据库中,成为数据库一个对象。效率比较高的,但你创建一个存储过程它会进行一个判断编译的
#创建一个简单的存储过程,这个存储过程什么都不操作,NULL表示;
is:声明一些变量;
#执行存储过程;
以上2中方法执行存储过程,如果没有什么输出参数可以用第一种execute xs_proc;如果有输出参数,最好用第2中方法;
#存储过程显示信息
输出要设置为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);
只带一个输入参数 ,把查询的结果显示出来
当输入学生的名字, 就会把他的总分(语文+数学)显示出来。
#输入参数 和 输出参数一起使用
#维护存储过程
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;