第一次在博客园写博客,写的不好,请大家多多评论,也希望自己以后对技术探索的更深。
今天下班之后,由于晚上要发版本,所以开发同事必须留下,突然收到一封公司监控预警邮件。
瞄了几眼,大致的意思就是说 视图无效。由于视图查询的是表,所以开始做实验测试。
实验一: 当基表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列的时候,对访问这张表的视图没有影响。
当对表的列的数据类型发生更改的时候,对访问这张表的视图没有影响。