oracle
数据库-Oracle
2.
3.
1. 创建
2. 创建
3. 创建时
4. 创建
凤凰登陆器源码,ubuntu 怎么增加源,tomcat对des的影响,爬虫考试大题,php环境适用win平台,广饶SEOlzw
推荐教学:《Oracle视频教学》asp门户网站源码下载,vscode谷歌,ubuntu 查看模块,tomcat维修,sqlite 数据损坏,服务器迁移通知,phpcms友情链接插件,前端框架和架构,微博爬虫302,写php扩展,seo白帽优化,地方新闻门户网站,网页飘动图片代码,帝国 会员模板,两个页面怎么切换效果,wordpress内容管理系统,安卓引导程序下载lzw
A、视图钻石投票源码安装,ubuntu飞行模式开启,爬虫单身资料信息,php宇宙,高明seo博客lzw
1. 创建修改视图
CREATE [OR REPLACE] [FORCE] VIEW 'view_name'AS 'sub_query'[WITH CHECK OPTION]-- 只读[WITH READ ONLY]
参数 | 说明 |
---|---|
OR REPLACE | 若所创建的试图已经存在,Oracle 自动重建该视图 |
FORCE | 不管基表是否存在 Oracle 都会自动创建该视图 |
sub_query | 一条完整的 SELECT 语句,可以在该语句中定义别名 |
WITH CHECK OPTION | 数据表插入或修改的数据行,必须满足视图定义的约束 |
WITH READ ONLY | 该视图上不能进行任何 DML 操作 |
2. 删除视图
DROP VIEW 'view_name';
B、试图案例
1. 简单视图
create or replace view `view_owners` asselect * from T_OWNERS where ownertypeid = 1;
select * from `view_owners` where addressid = 1;
update `view_owners` set name='王刚' where id = 2;select * from `view_owners`;
2. with check option
带检查约束视图
create or replace view `view_address` asselect * from T_ADDRESS where areaid = 2 with check option;
-- 无法修改成功-- 因为该视图的条件是`arreaid = 2`,不能修改为`arreaid = 1`。update `view_address` set areaid = 1 where id = 4;
3. with read only
只读视图
create or replace view `view_owners` asselect * from T_OWNERS where ownertypeid = 1 with read only;
update `view_owners` set name='王强' where id = 2;
4. 带错误视图
-- 错误视图,创建不成功create or replace view `view_TEMP`as-- `T_TEMP`表不存在select * from `T_TEMP`;
create or replace FORCE view `view_TEMP` asselect * from `T_TEMP`;
5. 复杂视图
5.1 多表关联查询
create or replace view `view_owners` asselect o.id '业主编号', o.name '业主名称', ot.name '业主类型' from T_OWNERS o, T_OWNERTYPE ot where o.ownertypeid = ot.id;
select * from `view_owners`;
-- 更新成功update view_owners set '业主名称' = '范小冰' where '业主编号' = 1; -- 更新失败update view_owners set '业主类型' ='普通居民' where '业主编号' = 1;
7.2 分组聚合统计查询
create view `view_account_sum` as-- 必须 + `money_sum` 别名select year, month, sum(money) money_sum from `T_ACCOUNT` group by year, monthorder by year, month;
update view_account_sum set money_sum = money_sum - 100 where year = 2012 and month = 12;
C、物化视图
# 物化视图日志(Tables)MLOG$_'表名'# 物化视图(Tables)MV_'表名'
1. 创建物化视图
CREATE MATERIALIZED VIEW 'view_name'-- 立即显示 | 延迟显示[ 'BUILD IMMEDIATE' | BUILD DEFERRED ] -- 快 | 完全 | 快or完全REFRESH [ FAST | COMPLETE | 'FORCE' ] [ON [ 'DEMAND' | COMMIT ] | START WITH (start_time) NEXT (next_time)]AS 'sub_query';
D、物化试图案例
1. 创建 手动刷新
的物化视图
create materialized view `mv_address`asselect ad.id, ad.name adname, ar.name ar_name from t_address ad, t_area ar where ad.areaid = ar.id;
select * from `mv_address`;
insert into `t_address` values (8, '宏福苑小区', 1, 1);
begin -- `C`完全刷新(COMPLETE) DBMS_MVIEW.refresh('MV_ADDRESS', 'C'); end;
-- 注意:此命令需要在命令窗口中执行。EXEC DBMS_MVIEW.refresh('MV_ADDRESS', 'C');
2. 创建 自动刷新
的物化视图
create materialized view `mv_address_2`refresh-- 自动刷新on commit asselect ad.id,ad.name adname,ar.name ar_name from t_address ad,t_area ar where ad.areaid=ar.id;
3. 创建时 不生成数据
的物化视图
create materialized view `mv_address_3`-- 创建不生成数据build deferred refresh-- 自动刷新on commit asselect ad.id,ad.name adname,ar.name ar_name from t_address ad,t_area ar where ad.areaid=ar.id;
select * from `mv_address_3`;
begin DBMS_MVIEW.refresh('MV_ADDRESS3', 'C');end;
4. 创建 增量刷新
的物化视图
-- 根据`rowid`create materialized view log on t_address with rowid; create materialized view log on t_area with rowid;
create materialized view `mv_address_4`-- 增量刷新refresh fast asselect ad.rowid adrowid, ar.rowid arrowid, ad.id, ad.name adname, ar.name ar_name -- 需要创建两表日志from t_address ad, t_area ar where ad.areaid = ar.id;
参数 | 说明 |
---|---|
SNAPTIME$$ | 用于表示刷新时间。 |
DMLTYPE$$ | 用于表示 DML 操作类型(I 表示 INSERT ,D 表示 DELETE ,U 表示 UPDATE )。 |
OLD_NEW$$ | 用于表示这个值是新值还是旧值(N (EW )表示新值,O (LD )表示旧值,U 表示 UPDATE 操作)。 |
CHANGE_VECTOR$$ | 表示修改矢量,用来表示被修改的是哪个或哪几个字段(此列是 RAW 类型)。其实 Oracle 采用的方式就是用每个 BIT 位去映射一个列。插入操作显示为: FE ,删除显示为:OO ,更新操作则根据更新字段的位置而显示不同的值。 |
begin DBMS_MVIEW.refresh('MV_ADDRESS4', 'C');end;
推荐教学:《Oracle视频教学》