我有一个SQL查询,运行时给出下面的错误。
SQ 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语句:
UPDATE(
SELECT UMR.*, RMINV.*
FROM UNMATCHED_RAW_TABLE UMR
INNER JOIN RMINV_RAWDATA_TEST RMINV
ON UMR.PHONE_NUMBER = RMINV.ITEM_IDCIRCUITWTN
WHERE UMR.CARRIER='ABCD'
AND RMINV.account_num='12345'
AND (RMINV.CC_CODE IS NULL OR RMINV.DEPARTMENT IS NULL)
)
SET UMR.UNMATCHED_REASONS = 'Missing Department'
型
让我知道如果我做错了什么。
我已经尝试更新SQL如上所述,但不为我工作。我只想更新“缺少部门”,因为结果来自选择查询。
Sample Data for both the table used in query
1条答案
按热度按时间bq9c1y661#
在Oracle中,可以根据视图更新表。该视图必须为每个更新表行生成一行,以便DBMS知道要在哪个行中查找更新。
使用更新语句,DBMS会告诉您,查询不能保证为每个UMR行生成一个结果行。(而且我对语法有点惊讶;我不认为别名UMR在查询之外是已知的,所以
SET umr.unmatched_reasons = ...
无论如何都会导致错误。)毕竟,这里根本不需要连接,因为您要做的只是在满足特定条件的情况下用常量更新表。因此,请在表上编写一条更新语句,提供适当的
WHERE
子句。使用EXISTS
或IN
在另一个表中查找数据。字符串
这是转换为普通表更新的更新语句。检查状况。这些是您要更新数据表时的条件吗?如果没有,请根据您的需要进行修改。