关于视图的update问题!
我对自己创建的视图进行update操作,结果出现提示:
“ORA-01733: 此处不允许虚拟列”
后我查看表user_updatable_columns,我创建的视图的列的updatable,insertable,deletable的值确实是NO,但是我用update语句想将其进行更新为YES的时候,却出现提示:
"ORA-01031: 权限不足"
后我又用sys用户给我创建视图的用户在表user_updatable_columns授权,使其具有update的权限,但是又报:
"ORA-01733: 此处不允许虚拟列"
请问这是什么原因?谢谢!
问题点数:20、回复次数:9Top
1 楼wl3721()回复于 2004-08-01 22:31:52 得分 20
更新视图与你构造视图时的表有关系,而且还与你的更新语句有关。你查看的user_updatable_columns是系统的数据字典,只能读,不能更新。这个数据字典只是告诉你在你的视图中那些列是可更新的,那些是不能更新的,视图中的列是否能更新,决定与你构造视图时的sql。Top
2 楼creativet(tao)回复于 2004-08-01 23:06:46 得分 0
我构造视图的sql语句就是最标准的方法:
create or replace view as select field1,field2.... from table_name where ....
这样是否会影响到视图的更新?请指教!Top
3 楼teddy_huang(生活多美好,睡觉)回复于 2004-08-02 00:14:15 得分 0
pls paster your create statement.
rownum psedo_column can't apear in create view clause.Top
4 楼creativet(tao)回复于 2004-08-02 09:09:04 得分 0
完整的create语句如下:
create or replace view query_view as
select
a.field1,
a.field2,
b.field1,
b.field2
from
table1 a,
table2 b
where
a.field1=b.field1;Top
5 楼creativet(tao)回复于 2004-08-02 09:15:14 得分 0
对了,上面的语句忘了一点,完整的应该如下:
create or replace view query_view as
select
a.field1,
a.field2,
b.field1,
b.field2,
null as field3,
null as field4
from
table1 a,
table2 b
where
a.field1=b.field1;
其中field3和field4是我自己创建的列,由select语句查询到的结果不包括field3和field4。我想用update更新的列也就是field3和field4。但就是更新不了!!!Top
6 楼drabit(square)回复于 2004-08-02 11:28:29 得分 0
用instead of trigger作视图更新Top
7 楼creativet(tao)回复于 2004-08-02 15:08:42 得分 0
能将这个instead of trigger贴出来,作个参考吗?谢谢!!!Top
8 楼idealistt(风过)回复于 2004-08-02 17:49:26 得分 0
要看视图的定义,
最简单的情况下,单个表的视图肯定可以更新,
多个表的视图有条件限制的,要看是否所以的关键列都选入视图中Top
9 楼teddy_huang(生活多美好,睡觉)回复于 2004-08-02 23:42:08 得分 0
field3, field4对应哪个表中的字段呢?
如果没有对应的字段又怎么更新呢?
view并不实际存储数据。Top




