【发布时间】:2013-12-20 10:18:13
【问题描述】:
我有以下 Oracle 10g sql,在我看来是正确的:
update ( select OLD1.TC_CUSTOMER_NUMBER,NEW1.PRD_CUST_NUMBER
FROM TBYC84_PROFILE_ACCOUNT OLD1,
TMP_PRD_KEP NEW1
WHERE
OLD1.TC_CUSTOMER_NUMBER = NEW1.KEP_CUST_NUMBER )
SET
TC_CUSTOMER_NUMBER = PRD_CUST_NUMBER
但是当我运行脚本时出现这个错误:
SQL Error: ORA-01779: cannot modify a column which maps to a non key-preserved table
01779. 00000 - "cannot modify a column which maps to a non key-preserved table"
*Cause: An attempt was made to insert or update columns of a join view which
map to a non-key-preserved table.
*Action: Modify the underlying base tables directly.
我已经对此错误进行了一些研究,但不太确定如何补救。 所以我的问题是,我该如何解决这个问题,或者有没有更好的方法来编写更新 sql?
任何帮助将不胜感激。
非常感谢
更新 我已将更新 sql 更改为:
update
TBYC84_PROFILE_ACCOUNT PA
set
(
PA.TC_CUSTOMER_NUMBER
) = (
select
TPK.PRD_CUST_NUMBER
from
TMP_PRD_KEP TPK
where
TPK.KEP_CUST_NUMBER = PA.TC_CUSTOMER_NUMBER
)
现在这已经更新了 TBYC84_PROFILE_ACCOUNT 表并取消了 TC_CUSTOMER_NUMBER 柱子。 为什么这样做? TBYC84_PROFILE_ACCOUNT.TC_CUSTOMER_NUMBER 中可能有不止一行 具有相同的帐号但用于不同的user_id。 请任何人都可以帮助我解决这个问题。 我需要做的就是将 TBYC84_PROFILE_ACCOUNT.TC_CUSTOMER_NUMBER 更新为 TMP_PRD_KEP 中的外部参照,这当然不是不可能的。
非常感谢
【问题讨论】: