视图更新问题

mingchaoyan 2011-04-27 10:57:43
SQL> desc 供应商信息
Name Null? Type
----------------------------------------- -------- ----------------------------
供应商编号 NOT NULL VARCHAR2(20)
供应商名称 VARCHAR2(50)
供应商所在城市 VARCHAR2(50)
联系人姓名 VARCHAR2(8)
联系电话 VARCHAR2(20)

SQL> desc 商品信息
Name Null? Type
----------------------------------------- -------- ----------------------------
商品编号 NOT NULL VARCHAR2(20)
商品名称 VARCHAR2(50)
库存编号 VARCHAR2(20)
供应商编号 VARCHAR2(20)
产地 VARCHAR2(50)
单价 NUMBER

SQL> set linesize 100
SQL> set pagesize 100
SQL> col 供应商所在城市 format a10
SQL> col 供应商名称 format a12
SQL> /

供应商编号 供应商名称 供应商所在 联系人姓 联系电话
-------------------- ------------ ---------- -------- --------------------
1001 畅通伟业 深圳市 杨少风 13658548595
1002 冰峰网络 上海市 李会兰 13589564258
1003 炎黄盈动 北京市 章域 13202545256
1004 海岳伟业科技 北京市 王海龙 13354856852
1005 中达恒业 北京市 韩玉方 13125648565
1006 北京世纪葵花 北京市 赵晓晓 13965485689
1007 南方电讯 南京市 姜民在 13785465852
1008 深信服科技 广州市 刘思浩 13585456585
1009 博科资讯 上海市 林南 13659856452
1026 华南科技 杭州市 王显

10 rows selected.

SQL> ed
Wrote file afiedt.buf

1 CREATE VIEW viewProviderMerch
2 AS
3 SELECT t1.供应商名称, t2.商品名称,t2.产地,t2.单价
4 FROM 供应商信息 t1, 商品信息 t2
5* WHERE t1.供应商编号=t2.供应商编号
SQL> /

View created.

SQL> col owner format a10
SQL> col table_name format a20
SQL> col column_name format a10
SQL> ed
Wrote file afiedt.buf

1 SELECT *
2 FROM user_updatable_columns
3* WHERE table_name=upper('viewProviderMerch')
SQL> /

OWNER TABLE_NAME COLUMN_NAM UPD INS DEL
---------- -------------------- ---------- --- --- ---
VENDITION VIEWPROVIDERMERCH 供应商名称 NO NO NO
VENDITION VIEWPROVIDERMERCH 商品名称 YES YES YES
VENDITION VIEWPROVIDERMERCH 产地 YES YES YES
VENDITION VIEWPROVIDERMERCH 单价 YES YES YES

SQL> spool off

以上代码 两个表连接成视图
表的结构我也贴出来了
问题是:
为啥 就 供应商名称 这个字段不可以更新 插入 删除 ,从表结构上看 供应商名称这个字段和 其他的没什么区别呀 而且也不是连接字段

需要更多的表信息 可以留言
要断网了,只能说这么多了。。。。。
...全文
191 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Well 2011-04-29
  • 打赏
  • 举报
回复
视图的更新是有条件的。。。
mingchaoyan 2011-04-28
  • 打赏
  • 举报
回复
我估计是只能更新一个表


睡前一顶,期待高手回答
浅笑雨忆 2011-04-28
  • 打赏
  • 举报
回复
我猜是因为供应商名称可以为空,所以不让更新
浅笑雨忆 2011-04-28
  • 打赏
  • 举报
回复
a:从多个关系使用联接操作导出的视图,不允许执行更新操作。
b:若导出视图的过程中使用分组和聚合操作,也不允许对这个视图执行更新
操作。
c:行列子集视图可执行更新操作。
iqlife 2011-04-28
  • 打赏
  • 举报
回复
不好意思看错了,是视图更新啊,不是所有视图都可以更新的,也不是所有视图的字段可以更新的,查看可更新的视图字段:
select * from user_updatable_columns where table_name =视图名称
iqlife 2011-04-28
  • 打赏
  • 举报
回复
供应商名称 这个字段不可以更新 插入 删除

首先确认表的主外键关系,是否存在父子表关系,如果存在,则子表不允许单独修改

最后,错误信息对于ORACLE来说很重要,贴出来

  • 打赏
  • 举报
回复
create table Supplier(Fnumber int,names nvarchar2(25))
insert into Supplier
select 1,'z' from dual union all
select 2,'y' from dual



create table Goods(Fnumber int,SupplierNumber int,names nvarchar2(25))
insert into Goods
select 1,1,'ok' from dual union all
select 2,2,'no' from dual

select * from Supplier
select * from Goods


create or replace View supplierGoods
as
select t1.names as k,t2.names as g from Supplier t1
inner join Goods t2
on t1.Fnumber=t2.suppliernumber;


select * from supplierGoods


insert into supplierGoods
select 'w','okno' from dual

delete from supplierGoods where k='z'
我的删除报错

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧