【问题标题】:Oracle SQL update a viewOracle SQL 更新视图
【发布时间】:2018-08-12 15:31:58
【问题描述】:

我使用这个表格视图已经有一段时间了。研究证明没有帮助。这就是我所拥有的。 我有 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】:

    父表(employee 和 tool)需要对引用的列(分别为employee_email 和 tool_no)进行显式(不可延迟)唯一约束。

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多