- 浏览: 21860 次
-
文章分类
- 全部博客 (32)
- JDK配置 (1)
- eclipse/myeclipse配置内存 (1)
- windows操作 (1)
- 测试方式 (1)
- 正则表达式小结 (1)
- JTable 使用细讲,好爽 (1)
- JButton的设置 (1)
- Apache和PHP的配置 (1)
- ant的介绍与使用 (1)
- MyEclipse 快捷键 (1)
- oracle (5)
- eclipse/myeclipse (2)
- tomcat (1)
- 异常 (1)
- java (4)
- ajax (1)
- 文件上传 (1)
- XMLHttpRequest (1)
- plsql (1)
- http协议 (1)
- java开发 (3)
- 开发软件操作 (1)
- eclipse/myeclipse 项目导入问题 (1)
- mysql (3)
- MSSQL (1)
- 项目部署 (0)
- 二维码 (1)
- svn (1)
最新评论
视图
1.视图的概述
视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束)
2.视图的存储
与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。
3.视图的作用
第一点:
使用视图,可以定制用户数据,聚焦特定的数据。
解释:
在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视图,以后他在查询数据时,只需select * from view_caigou 就可以啦。
第二点:使用视图,可以简化数据操作。
解释:我们在使用查询时,在很多时候我们要使用聚合函数,同时还要显示其它字段的信息,可能还会需要关联到其它表,这时写的语句可能会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我们只需要select * from view1就可以啦~,是不是很方便呀~
第三点:使用视图,基表中的数据就有了一定的安全性
因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,可以不通过视图给用户,视图是动态的数据的集合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改和删除,可以保证数据的安全性。
第四点:可以合并分离的数据,创建分区视图
随着社会的发展,公司的业务量的不断的扩大,一个大公司,下属都设有很多的分公司,为了管理方便,我们需要统一表的结构,定期查看各公司业务情况,而分别看各个公司的数据很不方便,没有很好的可比性,如果将这些数据合并为一个表格里,就方便多啦,这时我们就可以使用union关键字,将各分公司的数据合并为一个视图。
4.视图的工作机制
视图的定义就是其使用的查询语句,Oracle 将这个定义以文本形式存储在数据字典中。当用户在 SQL 语句中引用了视图时,Oracle 将进行以下工作:
将引用了视图的语句与视图的定义语句整合为一个语句
在共享SQL 区解析整合后的语句
执行此语句
当现有的共享SQL 区中没有与整合后的语句一致时,Oracle 才会为此语句创建新的共享SQL 区。因此,引用了视图的SQL 语句也能够利用已有的共享 SQL 区以达到节约内存和提高性能的目的。
5.视图的依赖性
由于视图的定义是一个引用了其他对象(表,视图)的查询,因此视图依赖于其所引用的对象。Oracle 会自动地处理视图的依赖性。例如,当用户移除了一个视图的基表后再重建此表,Oracle 将检查新的基表是否符合视图的定义并判断视图的有效性。
6.可更新的连接视图
连接视图是指在一个视图的定义查询的from字句中引用了多个表或视图。而可更新的连接视图是指能够执行 UPDATE,INSERT,和 DELETE 操作的连接视图。为了保证视图是可更新的,其定义中不能包含以下语法结构:
集合操作符
DISTINCT 操作符
聚合函数或分析型函数
GROUP BY,ORDER BY,CONNECT BY,或 START WITH 字句
在 SELECT 之后的列表中使用集合表达式
在 SELECT 之后的列表中使用子查询
连接(join)(但是有例外情况)
对于不可更新的视图,可以利用 INSTEAD OF 触发器对其数据进行修改。
视图的种类:
关系,内嵌,对象,物化
关系视图:Oracle视图是作为数据库对象存在的,因此,创建之后也可以通过工具或数据字典来查看视图的相关信息。这是大家常用的视图
如:create view 视图名称 as 查询语句|关系运算
创建关系视图:
create view 视图名称 as 查询语句|关系运算
如:
create view vw_employees as
select employee_id, employee_name, employee_position from employees;
可以查看窗口中的视图定义:
select view_name, text from user_views where view_name='VW_EMPLOYEES';
也可以用pl/developer 查看view。
使用关系视图:
对视图的使用和表的使用是一样的。在视图请允许修改更新时,对视图的更新修改实际为更新基础表中的数据。同理如果对基础表修改视图也同样发生改变。
如:
update vw_employees set employee_position='高级工程师' where employee_name='刘俊';
insert into vw_emloyees values (6,'张三','测试工程师');
如果删除视图:drop view view_name
如:drop view vw_employees;
如果替换视图:create or replace view 视图名称 as 查询语句|关系运算;
只读视图:
create or replace view 视图名称 as 查询语句 with read only;
如:
create or replace view vw_employees as
select employee_id, employee_name,employee_position, employee_age
from employees
with read only;
联接视图:
视图数据来自多张表
create or replace view vw_employee_salary as
select e.employee_id,e.employee_name,s.month,s.salary
from employees e,salary s
where e.employee_id=s.employee_id;
强制创建视图:
当基础表创建时,视图才自然生效。
create or replace force view 视图名称 as 查询语句|关系运算;
如:
create or replace force view vw_customer as
select customer_id,customer_code, customer_name,contact_telephone
from customer;
创建视图约束:
with check option .当视图被修改时会被提醒,仅对insert 、 update 有效。
如:
create or replace view vw_employees as
select employee_id, employee_name,employee_position, employee_age
from employees
where employee_id>3
with check option;
注:如果插入和更新的employee_id 小于3会提醒错误。
内嵌视图:在from语句中的可以把表改成一个子查询,如:select a.id ,b.id from emp a,(select id from dept) b where a.id=b.id内嵌视图不属于任何用户,也不是对象,内嵌视图是子查询的一种,可以与数据表、视图一样作为查询语句的数据源存在,但在形式上有较大的区别,内嵌视图不必使用create view命令进行创建,因此,在数据字典中也无法获得相应信息。内嵌视图的特点在于无须创建真正的数据库对象,而只是封装查询,因此会节约数据库资源,同时不会增加维护成本。但是内嵌视图不具有可复用性,因此当预期将在多处调用到同一查询定义时,还是应该使用关系视图。
内嵌视图:
select * from (
select * from employees order by employee_age)
where rownum<3;
对象视图:对象类型在数据库编程中有许多好处,但有时,应用程序已经开发完成。为了迎合对象类型而重建数据表是不现实的。对象视图正是解决这一问题的优秀策略。
对象视图创建之后,同样可以在数据字典中获得其相应信息。利用Oracle内置视图user_views可以获得对象视图相关信息。Oracle中的对象数据实际仍然以关系数据的形式存储。但是,对象的特性,例如继承、封装等,都为开发人员提供了更加灵活的处理形式。同样,可以构造复杂的对象类型来封装复杂的多表查询。
对象简介:
使用对象的好处:
1.对象的特性,如:继承、封装等,为开发人员提供灵活的处理形式。
2.可以构造复杂的对象类型来封装复杂的多表查询。
3.对象的传输效率更高。
创建一个对象语法:
create or replace type class_of_obj as object (
atrribute1 datatype1,
attribute2 datatype2,
attribute3 datatype3,
... ...
member function function1,
... ...
member procedure procedure1,
... ...
)
如:
SQL> create or replace type employee as object(
2 employee_id number,
3 employee_name varchar2(20),
4 employee_position varchar2(20)
5 );
可以利用视图usr_types查看信息:
SQL> select type_name,typecode,attributes from user_types where type_name='EMPLOYEE';
TYPE_NAME TYPECODE ATTRIBUTES
------------------------------ ------------------------------ ----------
EMPLOYEE OBJECT 3
也可以在 PL/SQL Developer 中查看Types。
二、从对象到数据:
1.对象类型可以用来定义表。
如:创建tmp_employee 表
SQL> create table emp_employee of employee;
Table created
查看:
SQL> desc tmp_employee;
Name Type Nullable Default Comments
----------------- ------------ -------- ------- --------
EMPLOYEE_ID NUMBER Y
EMPLOYEE_NAME VARCHAR2(20) Y
EMPLOYEE_POSITION VARCHAR2(20) Y
2.对象类型的实例是对象,而数据表实际存储的为数据。因此,每个对象实例,都可以映射为表中的某条记录。可以先创建对象,然后直接插入到数据表中。注:只有实例创建的表才能将实例插入表,效率高。
SQL> declare e employee;
2 begin
3 e :=employee(1,'吖ling','SQA'); --创建实例
4 insert into tmp_employee values (e); --插入表
5 end;
PL/SQL procedure successfully completed
SQL> select * from tmp_employee;
EMPLOYEE_ID EMPLOYEE_NAME EMPLOYEE_POSITION
----------- -------------------- --------------------
1 吖ling SQA
1 王五 SQA
三、从数据到对象:
数据表中的数据同样可以映射为实例:
value()函数把表中的数据实例化为一个对象。
SQL> declare e employee;
2 begin
3 select value(t) into e from tmp_employee t where employee_id=1; --把表里面的数据拿出来实例化
4 e.employee_id :=e.employee_id+1; --为实例里面的属性加一
5 e.employee_name :='Jamaly';
6 insert into tmp_employee values(e); --再把实例插入表中
7 end;
PL/SQL procedure successfully completed
SQL> select * from tmp_employee;
EMPLOYEE_ID EMPLOYEE_NAME EMPLOYEE_POSITION
----------- -------------------- --------------------
1 吖ling SQA
2 Jamaly SQA
对象视图:
对象类型在数据库编程中有许多好处,但是有时,应用程序已经开发完成。为了迎合对象类型而重建数据表是不实现的。对象视图下是解决这一问题的优秀策略。
1.创建对象视图:
SQL> create or replace view ov_employee of employee --视图基于对象类型employee
2 with object oid(employee_id) as --为对象视图指定对象标识符
3 select employee_id a_id ,employee_name ,employee_position from
4 employees;
View created
SQL> desc ov_employee;
Name Type Nullable Default Comments
----------------- ------------ -------- ------- --------
EMPLOYEE_ID NUMBER(2) Y
EMPLOYEE_NAME VARCHAR2(20) Y
EMPLOYEE_POSITION VARCHAR2(30) Y
查对象视图信息:
SQL> select view_name, view_type from user_views
2 where view_name='VW_EMPLOYEES' or view_name='OV_EMPLOYEE';
VIEW_NAME VIEW_TYPE
------------------------------ ------------------------------
OV_EMPLOYEE EMPLOYEE
VW_EMPLOYEES
2.更新视图
同样映射为更新表
SQL> insert into ov_employee values(
2 employee(20,'吖ling','数据库工程师')); --实例化一个employee对象
1 row inserted
SQL> select * from ov_employee;
EMPLOYEE_ID EMPLOYEE_NAME EMPLOYEE_POSITION
----------- -------------------- ------------------------------
1 王晓 开发经理
20 吖ling 数据库工程师
10 rows selected
再查看原表:employees
SQL> select * from employees;
EMPLOYEE_ID EMPLOYEE_NAME EMPLOYEE_POSITION EMPLOYEE_AGE EMPLOYEE_ADDRESS
----------- -------------------- ------------------------------ ------------ --------------------------------------------------
1 王晓 开发经理 37 解放北路23号 20 吖ling 数据库工程师
物化视图:
物化视图与其它视图不同,物化视图是存储数据的,因此会占用相对大的存储空间。对于大的数据表。当用户查询物化视图的数据时,不会搜索基础数据,而是在物化视图中获取数据。
1.创建及使用
语法:create materialized view 物化视图名称 as 视图定义
需要拥有dba的权限 。如:
SQL> create materialized view mv_object_count as
2 select object_type,count(*) from tmp_user_objects
3 group by object_type;
查看物化视图的信息:
select mview_name,query from user_mviews where mview_name='VM_OBJECT_COUNT';
oracle普通视图与物化视图的区别
MV和View差别非常大,不是几句能说清
MV是自动刷新或者手动刷新的,View不用刷新
MV也可以直接update,但是不影响base table,对View的update反映到base table上
MV主要用于远程数据访问,mv中的数据需要占用磁盘空间,view中不保存数据
使用代码创建视图
create view viewname --创建视图
as
sql select statementalter view viewname --修改视图
as
sql select statementdrop view viewname --删除视图
case1、(单表的)
create or replace view test as
select login_name,pwd from t_user
select login_name,pwd from test
case2、(多表的)
create or replace view test2 as
select a.name,a.cjsj,t_d_jh.zdzddl from
(select name,(to_char(cjsj,'yyyy')) cjsj from t_d_info_zdzddl) a
left join t_d_jh
on year=cjsj
select a.name,a.xzqh,a.cjsj,h.zdzddl from
t_d_info_zdzddl a,t_d_jh h
where to_char(a.cjsj,'yyyy')=h.year
and a.xzqh=h.xzqh
create view 视图名 AS
select 列1,列2,列3...
from 表1,表2,表......
where........
01445:
SQL> alter system set "_COMPLEX_VIEW_MERGING"=FALSE;
SQL> alter system set "_SIMPLE_VIEW_MERGING"=FALSE;
二、延迟载入:
如果创建物化视图在数据库访问高峰期,可以使用延迟载入。
语法:create materialized view 视图名称 build deffered as 视图定义
SQL> create materialized view mv_object_count build deffered as
2 select object_type,count(*) from tmp_user_objects
3 group by object_type;
三、数据刷新:
刷新是为了让基础表与物化视图同步。
默认的刷新 refresh 选项为 on demand 手动。
如:要刷新mv_object_count
SQL> exec dbms_mview.refresh('mv_object_count');
如果修改的次数不多:可以修改为 refresh on commit
alter materialied view mv_object_count refresh on commit;
四、查询重写:
当Oracle查询数据时总是搜寻from 子句中所指定的数据源(表或视图)。查询重写是指,当进行查询时,oracle改写查询语句,搜寻其他数据源,以在保证相同结果的情况下提高执行效率,而这个新的数据源,则往往是物化视图。查询重写的存在oracle自动将数据查询的数据源指向mv_object_count。
开启查询重写:
alter materialized view mv_object_count enable query rewrite;
1.视图的概述
视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束)
2.视图的存储
与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。
3.视图的作用
第一点:
使用视图,可以定制用户数据,聚焦特定的数据。
解释:
在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视图,以后他在查询数据时,只需select * from view_caigou 就可以啦。
第二点:使用视图,可以简化数据操作。
解释:我们在使用查询时,在很多时候我们要使用聚合函数,同时还要显示其它字段的信息,可能还会需要关联到其它表,这时写的语句可能会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我们只需要select * from view1就可以啦~,是不是很方便呀~
第三点:使用视图,基表中的数据就有了一定的安全性
因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,可以不通过视图给用户,视图是动态的数据的集合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改和删除,可以保证数据的安全性。
第四点:可以合并分离的数据,创建分区视图
随着社会的发展,公司的业务量的不断的扩大,一个大公司,下属都设有很多的分公司,为了管理方便,我们需要统一表的结构,定期查看各公司业务情况,而分别看各个公司的数据很不方便,没有很好的可比性,如果将这些数据合并为一个表格里,就方便多啦,这时我们就可以使用union关键字,将各分公司的数据合并为一个视图。
4.视图的工作机制
视图的定义就是其使用的查询语句,Oracle 将这个定义以文本形式存储在数据字典中。当用户在 SQL 语句中引用了视图时,Oracle 将进行以下工作:
将引用了视图的语句与视图的定义语句整合为一个语句
在共享SQL 区解析整合后的语句
执行此语句
当现有的共享SQL 区中没有与整合后的语句一致时,Oracle 才会为此语句创建新的共享SQL 区。因此,引用了视图的SQL 语句也能够利用已有的共享 SQL 区以达到节约内存和提高性能的目的。
5.视图的依赖性
由于视图的定义是一个引用了其他对象(表,视图)的查询,因此视图依赖于其所引用的对象。Oracle 会自动地处理视图的依赖性。例如,当用户移除了一个视图的基表后再重建此表,Oracle 将检查新的基表是否符合视图的定义并判断视图的有效性。
6.可更新的连接视图
连接视图是指在一个视图的定义查询的from字句中引用了多个表或视图。而可更新的连接视图是指能够执行 UPDATE,INSERT,和 DELETE 操作的连接视图。为了保证视图是可更新的,其定义中不能包含以下语法结构:
集合操作符
DISTINCT 操作符
聚合函数或分析型函数
GROUP BY,ORDER BY,CONNECT BY,或 START WITH 字句
在 SELECT 之后的列表中使用集合表达式
在 SELECT 之后的列表中使用子查询
连接(join)(但是有例外情况)
对于不可更新的视图,可以利用 INSTEAD OF 触发器对其数据进行修改。
视图的种类:
关系,内嵌,对象,物化
关系视图:Oracle视图是作为数据库对象存在的,因此,创建之后也可以通过工具或数据字典来查看视图的相关信息。这是大家常用的视图
如:create view 视图名称 as 查询语句|关系运算
创建关系视图:
create view 视图名称 as 查询语句|关系运算
如:
create view vw_employees as
select employee_id, employee_name, employee_position from employees;
可以查看窗口中的视图定义:
select view_name, text from user_views where view_name='VW_EMPLOYEES';
也可以用pl/developer 查看view。
使用关系视图:
对视图的使用和表的使用是一样的。在视图请允许修改更新时,对视图的更新修改实际为更新基础表中的数据。同理如果对基础表修改视图也同样发生改变。
如:
update vw_employees set employee_position='高级工程师' where employee_name='刘俊';
insert into vw_emloyees values (6,'张三','测试工程师');
如果删除视图:drop view view_name
如:drop view vw_employees;
如果替换视图:create or replace view 视图名称 as 查询语句|关系运算;
只读视图:
create or replace view 视图名称 as 查询语句 with read only;
如:
create or replace view vw_employees as
select employee_id, employee_name,employee_position, employee_age
from employees
with read only;
联接视图:
视图数据来自多张表
create or replace view vw_employee_salary as
select e.employee_id,e.employee_name,s.month,s.salary
from employees e,salary s
where e.employee_id=s.employee_id;
强制创建视图:
当基础表创建时,视图才自然生效。
create or replace force view 视图名称 as 查询语句|关系运算;
如:
create or replace force view vw_customer as
select customer_id,customer_code, customer_name,contact_telephone
from customer;
创建视图约束:
with check option .当视图被修改时会被提醒,仅对insert 、 update 有效。
如:
create or replace view vw_employees as
select employee_id, employee_name,employee_position, employee_age
from employees
where employee_id>3
with check option;
注:如果插入和更新的employee_id 小于3会提醒错误。
内嵌视图:在from语句中的可以把表改成一个子查询,如:select a.id ,b.id from emp a,(select id from dept) b where a.id=b.id内嵌视图不属于任何用户,也不是对象,内嵌视图是子查询的一种,可以与数据表、视图一样作为查询语句的数据源存在,但在形式上有较大的区别,内嵌视图不必使用create view命令进行创建,因此,在数据字典中也无法获得相应信息。内嵌视图的特点在于无须创建真正的数据库对象,而只是封装查询,因此会节约数据库资源,同时不会增加维护成本。但是内嵌视图不具有可复用性,因此当预期将在多处调用到同一查询定义时,还是应该使用关系视图。
内嵌视图:
select * from (
select * from employees order by employee_age)
where rownum<3;
对象视图:对象类型在数据库编程中有许多好处,但有时,应用程序已经开发完成。为了迎合对象类型而重建数据表是不现实的。对象视图正是解决这一问题的优秀策略。
对象视图创建之后,同样可以在数据字典中获得其相应信息。利用Oracle内置视图user_views可以获得对象视图相关信息。Oracle中的对象数据实际仍然以关系数据的形式存储。但是,对象的特性,例如继承、封装等,都为开发人员提供了更加灵活的处理形式。同样,可以构造复杂的对象类型来封装复杂的多表查询。
对象简介:
使用对象的好处:
1.对象的特性,如:继承、封装等,为开发人员提供灵活的处理形式。
2.可以构造复杂的对象类型来封装复杂的多表查询。
3.对象的传输效率更高。
创建一个对象语法:
create or replace type class_of_obj as object (
atrribute1 datatype1,
attribute2 datatype2,
attribute3 datatype3,
... ...
member function function1,
... ...
member procedure procedure1,
... ...
)
如:
SQL> create or replace type employee as object(
2 employee_id number,
3 employee_name varchar2(20),
4 employee_position varchar2(20)
5 );
可以利用视图usr_types查看信息:
SQL> select type_name,typecode,attributes from user_types where type_name='EMPLOYEE';
TYPE_NAME TYPECODE ATTRIBUTES
------------------------------ ------------------------------ ----------
EMPLOYEE OBJECT 3
也可以在 PL/SQL Developer 中查看Types。
二、从对象到数据:
1.对象类型可以用来定义表。
如:创建tmp_employee 表
SQL> create table emp_employee of employee;
Table created
查看:
SQL> desc tmp_employee;
Name Type Nullable Default Comments
----------------- ------------ -------- ------- --------
EMPLOYEE_ID NUMBER Y
EMPLOYEE_NAME VARCHAR2(20) Y
EMPLOYEE_POSITION VARCHAR2(20) Y
2.对象类型的实例是对象,而数据表实际存储的为数据。因此,每个对象实例,都可以映射为表中的某条记录。可以先创建对象,然后直接插入到数据表中。注:只有实例创建的表才能将实例插入表,效率高。
SQL> declare e employee;
2 begin
3 e :=employee(1,'吖ling','SQA'); --创建实例
4 insert into tmp_employee values (e); --插入表
5 end;
PL/SQL procedure successfully completed
SQL> select * from tmp_employee;
EMPLOYEE_ID EMPLOYEE_NAME EMPLOYEE_POSITION
----------- -------------------- --------------------
1 吖ling SQA
1 王五 SQA
三、从数据到对象:
数据表中的数据同样可以映射为实例:
value()函数把表中的数据实例化为一个对象。
SQL> declare e employee;
2 begin
3 select value(t) into e from tmp_employee t where employee_id=1; --把表里面的数据拿出来实例化
4 e.employee_id :=e.employee_id+1; --为实例里面的属性加一
5 e.employee_name :='Jamaly';
6 insert into tmp_employee values(e); --再把实例插入表中
7 end;
PL/SQL procedure successfully completed
SQL> select * from tmp_employee;
EMPLOYEE_ID EMPLOYEE_NAME EMPLOYEE_POSITION
----------- -------------------- --------------------
1 吖ling SQA
2 Jamaly SQA
对象视图:
对象类型在数据库编程中有许多好处,但是有时,应用程序已经开发完成。为了迎合对象类型而重建数据表是不实现的。对象视图下是解决这一问题的优秀策略。
1.创建对象视图:
SQL> create or replace view ov_employee of employee --视图基于对象类型employee
2 with object oid(employee_id) as --为对象视图指定对象标识符
3 select employee_id a_id ,employee_name ,employee_position from
4 employees;
View created
SQL> desc ov_employee;
Name Type Nullable Default Comments
----------------- ------------ -------- ------- --------
EMPLOYEE_ID NUMBER(2) Y
EMPLOYEE_NAME VARCHAR2(20) Y
EMPLOYEE_POSITION VARCHAR2(30) Y
查对象视图信息:
SQL> select view_name, view_type from user_views
2 where view_name='VW_EMPLOYEES' or view_name='OV_EMPLOYEE';
VIEW_NAME VIEW_TYPE
------------------------------ ------------------------------
OV_EMPLOYEE EMPLOYEE
VW_EMPLOYEES
2.更新视图
同样映射为更新表
SQL> insert into ov_employee values(
2 employee(20,'吖ling','数据库工程师')); --实例化一个employee对象
1 row inserted
SQL> select * from ov_employee;
EMPLOYEE_ID EMPLOYEE_NAME EMPLOYEE_POSITION
----------- -------------------- ------------------------------
1 王晓 开发经理
20 吖ling 数据库工程师
10 rows selected
再查看原表:employees
SQL> select * from employees;
EMPLOYEE_ID EMPLOYEE_NAME EMPLOYEE_POSITION EMPLOYEE_AGE EMPLOYEE_ADDRESS
----------- -------------------- ------------------------------ ------------ --------------------------------------------------
1 王晓 开发经理 37 解放北路23号 20 吖ling 数据库工程师
物化视图:
物化视图与其它视图不同,物化视图是存储数据的,因此会占用相对大的存储空间。对于大的数据表。当用户查询物化视图的数据时,不会搜索基础数据,而是在物化视图中获取数据。
1.创建及使用
语法:create materialized view 物化视图名称 as 视图定义
需要拥有dba的权限 。如:
SQL> create materialized view mv_object_count as
2 select object_type,count(*) from tmp_user_objects
3 group by object_type;
查看物化视图的信息:
select mview_name,query from user_mviews where mview_name='VM_OBJECT_COUNT';
oracle普通视图与物化视图的区别
MV和View差别非常大,不是几句能说清
MV是自动刷新或者手动刷新的,View不用刷新
MV也可以直接update,但是不影响base table,对View的update反映到base table上
MV主要用于远程数据访问,mv中的数据需要占用磁盘空间,view中不保存数据
使用代码创建视图
create view viewname --创建视图
as
sql select statementalter view viewname --修改视图
as
sql select statementdrop view viewname --删除视图
case1、(单表的)
create or replace view test as
select login_name,pwd from t_user
select login_name,pwd from test
case2、(多表的)
create or replace view test2 as
select a.name,a.cjsj,t_d_jh.zdzddl from
(select name,(to_char(cjsj,'yyyy')) cjsj from t_d_info_zdzddl) a
left join t_d_jh
on year=cjsj
select a.name,a.xzqh,a.cjsj,h.zdzddl from
t_d_info_zdzddl a,t_d_jh h
where to_char(a.cjsj,'yyyy')=h.year
and a.xzqh=h.xzqh
create view 视图名 AS
select 列1,列2,列3...
from 表1,表2,表......
where........
01445:
SQL> alter system set "_COMPLEX_VIEW_MERGING"=FALSE;
SQL> alter system set "_SIMPLE_VIEW_MERGING"=FALSE;
二、延迟载入:
如果创建物化视图在数据库访问高峰期,可以使用延迟载入。
语法:create materialized view 视图名称 build deffered as 视图定义
SQL> create materialized view mv_object_count build deffered as
2 select object_type,count(*) from tmp_user_objects
3 group by object_type;
三、数据刷新:
刷新是为了让基础表与物化视图同步。
默认的刷新 refresh 选项为 on demand 手动。
如:要刷新mv_object_count
SQL> exec dbms_mview.refresh('mv_object_count');
如果修改的次数不多:可以修改为 refresh on commit
alter materialied view mv_object_count refresh on commit;
四、查询重写:
当Oracle查询数据时总是搜寻from 子句中所指定的数据源(表或视图)。查询重写是指,当进行查询时,oracle改写查询语句,搜寻其他数据源,以在保证相同结果的情况下提高执行效率,而这个新的数据源,则往往是物化视图。查询重写的存在oracle自动将数据查询的数据源指向mv_object_count。
开启查询重写:
alter materialized view mv_object_count enable query rewrite;
相关推荐
1、文件内容:ibus-table-chinese-erbi-1.4.6-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ibus-table-chinese-erbi-1.4.6-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
选择Java后台技术和MySQL数据库,在前台界面为提升用户体验,使用Jquery、Ajax、CSS等技术进行布局。 系统包括两类用户:学生、管理员。 学生用户只要实现了前台信息的查看,打开首页,查看网站介绍、自习室信息、在线留言、轮播图信息公告等,通过点击首页的菜单跳转到对应的功能页面菜单,包括网站首页、自习室信息、注册登录、个人中心、后台登录。 学生用户通过账户账号登录,登录后具有所有的操作权限,如果没有登录,不能在线预约。学生用户退出系统将注销个人的登录信息。 管理员通过后台的登录页面,选择管理员权限后进行登录,管理员的权限包括轮播公告管理、老师学生信息管理和信息审核管理,管理员管理后点击退出,注销登录信息。 管理员用户具有在线交流的管理,自习室信息管理、自习室预约管理。 在线交流是对前台用户留言内容进行管理,删除留言信息,查看留言信息。
面向基层就业个性化大学生服务平台(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 面向基层就业个性化大学生服务平台(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 面向基层就业个性化大学生服务平台中的管理员角色主要负责了如下功能操作。 (1)职业分类管理功能需求:对职业进行划分分类管理等。 (2)用户管理功能需求:对用户信息进行维护管理等。 (3)职业信息管理功能需求:对职业信息进行发布等。 (4)问卷信息管理功能需求:可以发布学生的问卷调查操作。 (5)个性化测试管理功能需求:可以发布个性化测试试题。 (6)试题管理功能需求:对测试试题进行增删改查操作。 (7)社区交流管理功能需求:对用户的交流论坛信息进行维护管理。 面向基层就业个性化大学生服务平台中的用户角色主要负责了如下功能操作。 (1)注册登录功能需求:没有账号的用户,可以输入账号,密码,昵称,邮箱等信息进行注册操作,注册后可以输入账号和密码进行登录。 (2)职业信息功能需求:用户可以对职业信息进行查看。 (3)问卷信息功能需求:可以在线进行问卷调查答卷操作。 (4)社区交流功能需求:可以在线进行社区交流。 (5)个性化测试功能需求:可以在线进行个性化测试。 (6)公告资讯功能需求:可以查看浏览系统发布的公告资讯信息。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。
三菱Fx3u程序:自动检测包装机电机控制模板,PLC脉冲与伺服定位,手自动切换功能,三菱Fx3u程序:自动检测包装机电机控制模板——涵盖伺服定位与手自动切换功能,三菱Fx3u程序,自动检测包装机。 该程序六个电机,plc本体脉冲控制3个轴,3个1pg控制。 程序内包括伺服定位,手自动切,功能快的使用,可作为模板程序,很适合新手。 ,三菱Fx3u程序; 自动检测包装机; 六个电机; PLC脉冲控制; 伺服定位; 手自动切换; 功能快捷键; 模板程序。,三菱Fx3u PLC控制下的自动包装机程序:六电机伺服定位与手自动切换模板程序
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
计及信息间隙决策与多能转换的综合能源系统优化调度模型:实现碳经济最大化与源荷不确定性考量,基于信息间隙决策与多能转换的综合能源系统优化调度模型:源荷不确定性下的高效碳经济调度策略,计及信息间隙决策及多能转的综合能源系统优化调度 本代码构建了含风电、光伏、光热发电系统、燃气轮机、燃气锅炉、电锅炉、储气、储电、储碳、碳捕集装置的综合能源系统优化调度模型,并考虑P2G装置与碳捕集装置联合运行,从而实现碳经济的最大化,最重要的是本文引入了信息间隙决策理论考虑了源荷的不确定性(本代码的重点)与店铺的47代码形成鲜明的对比,注意擦亮眼睛,认准原创,该代码非常适合修改创新,,提供相关的模型资料 ,计及信息间隙决策; 综合能源系统; 优化调度; 多能转换; 碳经济最大化; 风电; 光伏; 燃气轮机; 储气; 储电; 储碳; 碳捕集装置; P2G装置联合运行; 模型资料,综合能源系统优化调度模型:基于信息间隙决策和多能转换的原创方案
IPG QCW激光模块电源驱动电路设计与实现:包含安全回路、紧急放电回路及光纤互锁功能的多版本原理图解析,IPG QCW激光模块电源驱动电路设计与实现:含安全回路、紧急放电及光纤互锁等多重保护功能的原理图解析,IPG QCW激光模块电源驱动电路, 包含安全回路,紧急放电回路,光纤互锁回路等, 元件参数请根据实际设计适当调整,此电路仅供参考,不提供pcb文件 原理图提供PDF和KICAD两个版本。 ,IPG激光模块; QCW激光电源驱动; 安全回路; 紧急放电回路; 光纤互锁回路; 原理图PDF和KICAD版本。,IPG激光模块电源驱动电路图解:含安全与紧急放电回路
基于LSSVM的短期电力负荷预测模型及其性能评估:结果揭露精确度与误差分析,LSSVM在短期电力负荷预测中的结果分析:基于均方根误差、平均绝对误差及平均相对百分误差的评估。,LSSVM最小二乘支持向量机做短期电力负荷预测。 结果分析 均方根误差(RMSE):0.79172 平均绝对误差(MAE):0.4871 平均相对百分误差(MAPE):13.079% ,LSSVM(最小二乘支持向量机);短期电力负荷预测;均方根误差(RMSE);平均绝对误差(MAE);平均相对百分误差(MAPE),LSSVM在电力负荷短期预测中的应用及性能分析
1、文件内容:libmtp-examples-1.1.14-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/libmtp-examples-1.1.14-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
资源内项目源码是均来自个人的课程设计、毕业设计或者具体项目,代码都测试ok,都是运行成功后才上传资源,答辩评审绝对信服的,拿来就能用。放心下载使用!源码、说明、论文、数据集一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 4、如有侵权请私信博主,感谢支持
2023-04-06-项目笔记-第四百一十六阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.414局变量的作用域_414- 2025-02-21
MINIST数据集和春风机器学习框架
1、文件内容:ibus-table-chinese-wu-1.4.6-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ibus-table-chinese-wu-1.4.6-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
宿舍管理系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 系统拥有管理员和学生两个角色,主要具备系统首页、个人中心、学生管理、宿舍信息管理、宿舍分配管理、水电费管理、进入宿舍管理、出入宿舍管理、维修信息管理、卫生信息管理、考勤信息管理、留言板、交流论坛、系统管理等功能模块。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
人凤飞飞凤飞飞是粉色丰富
2024蓝桥杯嵌入式学习资料
image_download_1740129191509.jpg
基于Multisim仿真的带优先病房呼叫系统设计(仿真图) 设计一个病房呼叫系统。 功能 (1)当有病人紧急呼叫时,产生声,光提示,并显示病人的编号; (2)根据病人的病情设计优先级别,当有多人呼叫时,病情严重者优先; (3)医护人员处理完当前最高级别的呼叫后,系统按优先级别显示其他呼叫病人的病号。
基于STM32F103的3.6kW全桥逆变器资料:并网充电放电、智能切换与全方位保护方案,基于STM32F103的3.6kW全桥逆变器资料:并网充电放电、智能控制与全方位保护方案,逆变器光伏逆变器,3.6kw储能逆变器全套资料 STM32储能逆变器 BOOST 全桥 基于STM32F103设计,具有并网充电、放电;并网离网自动切;485通讯,在线升级;风扇智能控制,提供过流、过压、短路、过温等全方位保护。 基于arm的方案区别于dsp。 有PCB、原理图及代码ad文件。 ,逆变器; 储能逆变器; STM32F103; 3.6kw; 485通讯; 全方位保护; 智能控制; 方案区别; PCB文件; 原理图文件; ad文件。,基于STM32F103的3.6kw储能逆变器:全方位保护与智能控制