在oracle中更新视图

时间:2014-05-18 19:34:09

标签: oracle sql-update sqlplus

下面,我已经为定义中输入的相关表定义了一些表。很简单,虽然现在我试图在视图中提高这两位员工的工资,但我无法完成更新,并在下面看到错误消息。有人可以指导我一点吗? 表employees,projects和employees_projects的定义: 创建表员工 (     身份证号码,     name varchar2(20),     mobile varchar2(10),     地址varchar2(30),     工资号码(6,2),     hire_date日期,     department_id号码 );

创建表项目 (     身份证号码,     name 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

如何成功更新它?

非常感谢,抱歉给您带来不便!!

1 个答案:

答案 0 :(得分:0)

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 docs的更多信息是here。 来自Burleson的Anoter解释here.

相关问题