【问题标题】:Oracle: update using values from other tablesOracle:使用其他表中的值进行更新
【发布时间】: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 触发器,以找出你想要更新表中的哪些行吗?
  • 可能重复[使用另一个表中的数据更新一个表中的行,基于每个列中的一列相等](stackoverflow.com/questions/7918688/…)
  • 对于 Justin Cave:不,wkf_cronologia 是一张桌子。也许你可以更好地理解阅读我之前的帖子:stackoverflow.com/questions/9164586/…

标签: oracle plsql sql-update


【解决方案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;

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 2015-09-16
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多