第一次在博客园写博客,写的不好,请大家多多评论,也希望自己以后对技术探索的更深。
今天下班之后,由于晚上要发版本,所以开发同事必须留下,突然收到一封公司监控预警邮件。
瞄了几眼,大致的意思就是说 视图无效。由于视图查询的是表,所以开始做实验测试。
实验一: 当基表drop列的时候,视图是否还是有效?
1.新建一张基表:
create table test1(row_id number,cust_no varchar2(100));
2.查看表的表结构
select a.owner,
a.table_name,
c.comments,
a.column_name,
a.data_type,
a.char_length,
a.data_default,
b.comments
from dba_tab_columns a
inner join dba_col_comments b
on a.owner = b.owner
and a.table_name = b.table_name
and a.column_name = b.column_name
inner join dba_tab_comments c
on a.table_name = c.table_name
and a.owner = c.owner
where a.owner = upper(‘scott’)
and a.table_name = upper(‘test1’)
order by a.column_id;
3.创建一张视图
create or replace view v_test1 as select * from test1;
4.查看视图的状态:
5.删除cust_no列,表结构如下:
— drop columns
alter table test1 drop column cust_no;
6.查看视图是否还是有效? 此时看到视图已经无效了
实验二:
当表新增列的时候,视图是否还是有效的昵?
1.新建一张测试表,表结构如下:
create table test_add_col(row_id varchar(10),cust_no varchar2(20));
2.创建一张视图,命令如下:
create or replace view v_test_add_col as select * from test_add_col;
3.查看视图的状态,如下:
4.对test_add_col表新增一列,脚本如下:
— add/modify columns
alter table test_add_col add cust_name varchar2(100);
5.最后查看视图v_test_add_col 是否还是有效?
select t.status,t.* from dba_objects t where t.object_name = upper(‘v_test_add_col’);
结论:当对表drop列的时候,对访问这张表的视图有影响,要相应的修改视图。
当对表add列的时候,对访问这张表的视图没有影响。
当对表的列的数据类型发生更改的时候,对访问这张表的视图没有影响。