更新脚本错误

时间:2018-01-15 13:30:39

标签: sql oracle

我正在尝试通过PL SQL开发人员更新oracle db中的一些缺失数据。我尝试了两个单独的更新变化,但我一直收到错误:

  

ora-01779无法修改映射到非密钥保留的列   表

任何人都有任何想法。

    Update  (Select i.involvement_id, i.open_date, i.close_date, i.status_id,  
            iof.outcome_code, iof.involvement_form_outcome_id, 
            ifm.description 

     FROM   involvement i, involvement_form ifm, involvement_form_outcome  
            iof, involvement_outcome io

     WHERE   i.involvement_form_id = ifm.Involvement_form_id (+)
     and     i.involvement_id = io.involvement_id (+) 
     and     io.involvement_form_outcome_id = 
             iof.involvement_form_outcome_id (+)
     and     ifm.description = 'Midnight League' and iof.outcome_code is 
             null)iof
     SET     iof.outcome_code = 'ENI'


     Update  (Select  * FROM involvement i, involvement_form ifm,  
                involvement_form_outcome iof, involvement_outcome io
     WHERE   i.involvement_form_id = ifm.Involvement_form_id (+)
     and     i.involvement_id = io.involvement_id (+) 
     and     io.involvement_form_outcome_id = 
             iof.involvement_form_outcome_id (+)
     and     ifm.description = 'Midnight League' and i.involvement_id  
             = '77176' )iv
     SET      iv.outcome_code = 'ENI'

1 个答案:

答案 0 :(得分:2)

视图中的密钥保留表是仅连接到唯一键的表。 (在这种情况下,您的update (select ...)使用inline view,但适用相同的规则。)

例如,如果视图在EMPLOYEES上加入DEPARTMENTSdeptno,则必须通过主键或唯一键或唯一索引保证departments.deptno唯一。如果是,则Oracle知道连接不能引入重复项,并且您可以安全地更新属于EMPLOYEES的视图列。

如果departments.deptno不能保证唯一,那么该视图可能包含两次相同的员工行。如果你试图更新一个而不是另一个会发生什么?这是错误阻止的情况。

请注意,Oracle仅检查是否存在唯一约束/索引,无论是否存在任何实际重复项。

您可以尝试将其转换为MERGE,这可能会更灵活一些。这不会检查约束,只会在实际重复项上失败,而是ORA-30926: unable to get a stable set of rows in the source tables