Oracle SQL更新视图

问题描述 投票:1回答:1

我一直在使用这个表视图。研究证明没有帮助。这就是我所拥有的。我有3个表--Loan_01,employee_01和tool_01

在这3个表中,我正在查看7列

SELECT
l.tool_desc,
t.tool_id_from_mfg,
t.tool_mfg,
e.employee_name,
l.job_desc,
l.loan_active,
l.loan_status_change_date
FROM loan_01 l
join employee_01 e ON l.employee_email=e.employee_email
join tool_01 t ON l.tool_no=t.tool_no ;

它成功创建并运行返回的数据。我尝试更新

    UPDATe TOOL_LOAN_MINE
SET loan_active = 'Inactive',
loan_status_change_date = SYSDATE
WHERE loan_status_change_date = '18-SEP-16' AND tool_out_date = '16-SEP-16'
AND loan_active = 'Active';

它返回ORA-01779无法修改映射到非密钥保留表的列。

如果我正确阅读这篇文章 - https://dba.stackexchange.com/questions/127708/updating-a-view-on-multiple-joined-tables

只要我对多个(贷款)表进行更改,它就应该更新。我究竟做错了什么?

提前致谢

sql oracle join view
1个回答
0
投票

父表(员工和工具)将需要对引用列(employee_email和tool_no)的显式(不可延迟)唯一约束。

虽然tool_no看起来可能是主键,但我怀疑你要么没有对电子邮件的唯一约束,要么它在某些功能上,如UPPER(电子邮件)

如果您有两名员工使用相同的电子邮件(如果员工表包含重复使用电子邮件地址的前员工,则可能是合法的),那么即使只更新一个贷款记录,也会影响视图中的多行。

© www.soinside.com 2019 - 2024. All rights reserved.