【发布时间】:2014-07-06 17:21:13
【问题描述】:
下面,我定义了一些表格,对于我在定义中键入的相关表格。非常简单,尽管现在我正试图提高视图中这两名员工的工资,但我无法完成更新,并出现您将在下面看到的错误消息。任何人都可以指导我一点,好吗? 表employees、projects和employees_projects的定义: 创建表员工 ( 身份证号码, 名称 varchar2(20), 移动 varchar2(10), 地址 varchar2(30), 工资号码(6,2), 雇用日期, 部门编号 );
创建表项目 ( 身份证号码, 名称 varchar2(20), 预算数(10,2), start_date 日期, 完成日期日期 ); 创建表employee_projects ( 身份证号码, employee_id 号码, project_id 编号 );
视图定义为:
create view lucky_employees as
select e.name,e.salary from employees e, project p, employee_projects ep
where e.project_id=p.id and e.id=ep.employee_id and p.budget > 1000000.00 ;
SQL> select * from lucky_employees;
ID NAME SALARY
1 Maria 1365.28
2 Sonja 1365.28
然后,我尝试将视图更新 10%,这是我知道在某些条件下可以执行的操作: SQL>
update lucky_employees set salary = salary * 1.1;
update lucky_employees set salary = salary * 1.1
*
第 1 行出现错误:
ORA-01779: cannot modify a column which maps to a non key-preserved table
如何成功更新它??
非常感谢,不便之处请见谅!!
【问题讨论】:
-
我想你可能需要添加视图的定义。
-
请显示视图和基础表。我们不是读心术的人。
-
我正在尝试读懂你的想法并且...(咕噜声!)...(grrrrrrr)...(blink)...我什么都没有。您可能希望发布
CREATE VIEW声明和您正在使用的Oracle 版本,而不是指望我们在远程读心方面的可疑技能。可能会节省时间、麻烦和一些麻烦。谢谢。 (而且 - 有人通过布洛芬...) -
好的,抱歉耽搁了,非常感谢您的回复。我的 sqlplus 的版本是 11.2,这是视图的创建: create view lucky_employees as select e.name from employees e, project p, employee_projects ep where e.project_id=p.id and e.id=ep.employee_id和 p.budget > 1000000.00 ;
-
然后,视图就是上面那两个员工的视图。想法是将他们的薪水提高 10% 更新视图,如 SQL> update lucky_employees 设置薪水 = 薪水 * 1.1;但我收到了那个错误消息:第 1 行的错误:ORA-01779:无法修改映射到非键保留表的列谢谢!!!!
标签: oracle sql-update sqlplus