View
1在oracle中视图是一种逻辑结构,本身没有数据。
2 利用视图的原因
限制数据访问
使复杂的查询语句简单化
提供数据的独立性(与基本独立)
可以在相同的基本数据中提供多种数据结果
3 创建视图的命令
Create or replace [force,noforce] view
As
With check option(with read read)
这里的force是强制建立视图,即使有问题,会提示编译错误,noforce 是oracle的默认选项.如下:
SQL> create or replace view v_tmp1
2 as select * from tmp1111;
as select * from tmp1111
第 2 行出现错误:
ORA-00942: 表或视图不存在
SQL> create or replace force view v_tmp1
2 as select * from tmp1111;
警告: 创建的视图带有编译错误。
在创建视图时查询语句是需要指定列表,如果没有则会提示错误如下:
SQL> create table sales(id int,qty int);
表已创建。
SQL> 1 create or replace view v_sales
2 as
3 select id,sum(qty)
4 from sales
5* group by id
select id,sum(qty)
第 3 行出现错误:
ORA-00998: 必须使用列别名命名此表达式
改成如下即可以
SQL> l
1 create or replace view v_sales
2 as
3 select id,sum(qty) as qty
4 from sales
5* group by id
视图已创建。
4.修改视图 create or replace
5.删除视图 drop view v_sales;
6.关于视图的修改
视图中分为简单视图和复杂视图
如果视图中包括group function ,一个group by 语句,Distinct 关键字 等,这些视图是不允许修改的。
下面有几个简单的例子:
SQL> select * from sales;
ID QTY
---------- ----------
1 2
1 2
1 2
2 10
2 10
SQL> create view v_sales
2 as
3 select * from sales;
视图已创建。
SQL> update v_sales
2 set qty=3 where id=1;
已更新3行。
对于有些复杂的视图不允许修改
SQL> update v_sales_1 set qty=12 where id=2;
update v_sales_1 set qty=12 where id=2
*
第 1 行出现错误:
ORA-01732: 此视图的数据操纵操作非法
SQL> create or replace view v_sales_2
2 as select * from sales
3 with read only;
视图已创建。
SQL> update v_sales_2 set qty=10;
update v_sales_2 set qty=10
*
第 1 行出现错误:
ORA-01733: 此处不允许虚拟列
7 查看视图的结构
SQL> desc v_sales;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
QTY NUMBER(38)
8 在oracle中的几个关于视图信息的动态视图
SQL> desc user_views;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER
TEXT LONG
TYPE_TEXT_LENGTH NUMBER
TYPE_TEXT VARCHAR2(4000)
OID_TEXT_LENGTH NUMBER
OID_TEXT VARCHAR2(4000)
VIEW_TYPE_OWNER VARCHAR2(30)
VIEW_TYPE VARCHAR2(30)
SUPERVIEW_NAME VARCHAR2(30)
SQL> select text from user_views where view_name='V_SALES';
TEXT
--------------------------------------------------------------------------------
select "ID","QTY" from sales