【问题标题】:Updating a view in oracle在 oracle 中更新视图
【发布时间】: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


【解决方案1】:
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 and p.budget > 1000000.00 ;

发生此错误是因为您的视图的每个薪水都没有唯一地映射到您的员工表的薪水。

来自 oracle 文档的更多信息是 here。 Burleson 的另一个解释here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多