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:使用其他表中的值进行更新的主要内容,如果未能解决你的问题,请参考以下文章

Oracle:使用来自同一表的聚合值更新表中的值

用 Oracle 中同一张表中的其他行数据更新一行

Oracle 删除表中的重复行并使用另一个表中的值更新行

如何根据oracle中另一个表中的值更新一个表中的字段[重复]

在更新触发器之前或之后更改同一表中的值(oracle)

如何从其他表中更新表中的值