关于oracle中的视图学习总结

来源:互联网 发布:淘宝上的电视能买吗 编辑:程序博客网 时间:2024/06/06 12:41

View

1oracle中视图是一种逻辑结构,本身没有数据。

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