文档库 最新最全的文档下载
当前位置:文档库 › oracle视图

oracle视图

视图的定义:
计算机数据库中的视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。



SQL>sqlplus scott/tiger

直接查询
SQL> select empno,ename from emp;

创建视图
SQL> create view emps as select empno,ename from emp;
create view emps as select empno,ename from emp
*
第 1 行出现错误:
ORA-01031: 权限不足

授权并重新创建视图
SQL> conn system/a as sysdba;
已连接。
SQL> grant create view to scott;

授权成功。

SQL> conn scott/tiger
已连接。
SQL> create view emps as select empno,ename from emp;

视图已创建。

查看所有创建的视图
SQL> desc user_views;
SQL> select view_name from user_views;

VIEW_NAME
------------------------------
EMPS
或者
SQL> select object_name from user_objects where object_type like 'VIEW';

OBJECT_NAME
--------------------------------------------------------------------------

EMPS

通过视图查看表信息
SQL> select * from emps;

创建班级表
SQL> create table clazz(id number(10) primary key,cname varchar2(20));
创建班级序列
SQL> create sequence clz_seq
2 start with 1
3 increment by 1;
创建学生表
SQL> create table student (id number(10) primary key, name varchar2(20),cid intdefault 0);
创建学生序列
SQL> create sequence stu_seq
2 start with 1
3 increment by 1;

插入班级表
SQL> insert into clazz values(clz_seq.nextval,'001');
插入学生
SQL> insert into student values(stu_seq.nextval, 'abc',1);
同时查询
SQL> select https://www.wendangku.net/doc/658709646.html,,https://www.wendangku.net/doc/658709646.html,ame from student s,clazz c where c.id=s.cid;

NAME CNAME
-------------------- --------------------
abc 001
luls 001
lily 002
lucy 003


SQL> select https://www.wendangku.net/doc/658709646.html,,https://www.wendangku.net/doc/658709646.html,ame from student s left join clazz c on s.cid=c.id;

NAME CNAME
-------------------- --------------------
luls 001
abc 001
lily 002
lucy 003
bb


没有班级,空值函数
SQL> select https://www.wendangku.net/doc/658709646.html,,nvl(https://www.wendangku.net/doc/658709646.html,ame,'not clazz') from student s left join clazz c on
s.cid=c.id;

NAME NVL(https://www.wendangku.net/doc/658709646.html,AME,'NOTCLAZ
-------------------- --------------------
luls 001
abc 001
lily 002
lucy 003
bb not clazz

创建二个表的视图
SQL> create view stu_cla as select https://www.wendangku.net/doc/658709646.html,,nvl(https://www.wendangku.net/doc/658709646.html,ame,'not clazz') as cname from
student s left join clazz c on s.cid=c.id;

通过视图完成查询
SQL> select * from stu_cla;

NAME CNAME
-------------------- --------------------
luls 001
abc

001
lily 002
lucy 003
bb not clazz

视图就是一种虚拟表

通过视图删除数据,可以直接删除,学生表数据删除了,班级表没有删除
SQL> delete from stu_cla where name like 'abc';

已删除 1 行。

SQL> select * from stu_cla;

NAME CNAME
-------------------- --------------------
luls 001
lily 002
lucy 003
bb not clazz

SQL> select * from student;

ID NAME CID
---------- -------------------- ----------
2 luls 1
3 lily 2
4 lucy 3
5 bb 0

SQL> select * from clazz;

ID CNAME
---------- --------------------
1 001
2 002
3 003
4 004

通过视图可以修改表
SQL> update stu_cla set name='sssssssssss' where name like 'lily';

已更新 1 行。

SQL> select * from student;

ID NAME CID
---------- -------------------- ----------
2 luls 1
3 sssssssssss 2
4 lucy 3
5 bb 0


视图不允许增加数据】
SQL> insert into stu_cla values('ddddddddddddddd','005');
insert into stu_cla values('ddddddddddddddd','005')
*
第 1 行出现错误:
ORA-01733: 此处不允许虚拟列



基表变化,视图页跟着变化
SQL> insert into student values(stu_seq.nextval,';sjflsd',3);

已创建 1 行。

SQL> select * from stu_cla;

NAME CNAME
-------------------- --------------------
luls 001
sssssssssss 002
;sjflsd 003
lucy 003
bb not clazz




































相关文档
相关文档 最新文档