Oracle:使用其他表中的值进行更新
Posted
技术标签:
【中文标题】Oracle:使用其他表中的值进行更新【英文标题】:Oracle: update using values from other tables 【发布时间】:2012-02-07 12:19:55 【问题描述】:我有以下更新,但我不想手动复制这些值。 我更喜欢使用查询来提取它们。 我应该使用 PL/SQL 还是有 SQL 公式?
我用来获取手动复制到更新中的值的查询不是键保留(“连接视图中的键保留表概念”)。
UPDATE wkf_cronologia
SET swkf_stato_workflow_id = 'o3gE1tlSdcDIC6FF',
swkf_data_ini = TO_TIMESTAMP ('19-06-2010 18:28:10,556000000','DD-MM-RRRR HH24:MI:SS,FF'),
swkf_versione = 0,
SPWKF_STATO_PUBBLICO_ID = '*1UNICOO',
SPWKF_DATA_INI = TO_TIMESTAMP ('01-01-0001 00:00:00,000000000', 'DD-MM-RRRR HH24:MI:SS,FF'),
SPWKF_VERSIONE = 0
WHERE wkfc_cronologia_id = 'ApAJ0qCudNphjLxj';
【问题讨论】:
您是说wkf_cronologia
是一个视图吗?并且该视图没有保留密钥?这意味着当您发出更新语句时,Oracle 无法确定要更新一个或多个基础表中的哪些行。您可以保留视图密钥吗?你能更新基表吗?你能在视图上创建一个INSTEAD OF UPDATE
触发器,以找出你想要更新表中的哪些行吗?
可能重复[使用另一个表中的数据更新一个表中的行,基于每个列中的一列相等](***.com/questions/7918688/…)
对于 Justin Cave:不,wkf_cronologia 是一张桌子。也许你可以更好地理解阅读我之前的帖子:***.com/questions/9164586/…
【参考方案1】:
您可以使用子查询:
UPDATE wkf_cronologia
SET (swkf_stato_workflow_id,
swkf_data_ini,
swkf_versione,
SPWKF_STATO_PUBBLICO_ID,
SPWKF_DATA_INI,
SPWKF_VERSIONE) = (select a,b,0,c,d,e
from another_table
where something=wkf_cronologia.swkf_stato_workflow_id)
WHERE swkf_versione is null;
【讨论】:
以上是关于Oracle:使用其他表中的值进行更新的主要内容,如果未能解决你的问题,请参考以下文章