PL / SQL更新查询

时间:2016-11-02 18:06:23

标签: sql oracle

尝试使用我在PL / SQL中创建的另一个表中的空值来更新我创建的表: 我能够在SQL Server中使用以下更新但是我遇到了PL / SQL中的问题(不要问为什么我在两者中运行它) Overall_Inventory =使用一些填充值和一些null valuse创建的表;这是需要更新这些空值的表 task_table =表也已创建,但包含需要更新到T1的值

update dbh.overall_inventory
   set dbh.overall_inventory.case_due_date = tsk.TASK_ACTION_TIMESTAMP
  from dbh.overall_inventory, 
       (SELECT tsk.INQ_KEY,
               min(tsk.TASK_ACTION_TIMESTAMP) as TASK_ACTION_TIMESTAMP
          FROM dbh.task_table tsk
               inner join dbh.overall_inventory Inv 
                       on tsk.INQ_KEY = inv.inq_key
         where tsk.ACTION_CD = '324' 
         group by tsk.INQ_KEY
        ) tsk
    where tsk.INQ_KEY = dbh.overall_inventory.inq_key`

2 个答案:

答案 0 :(得分:0)

Oracle在from语句中不支持update子句。在这种情况下,可以使用merge语句。

merge into overall_inventory oi
  using (select tsk.inq_key,
                min(tsk.task_action_timestamp) as task_action_timestamp
           from task_table tsk
                join overall_inventory Inv 
                  on tsk.inq_key = inv.inq_key
          where tsk.action_cd = '324' 
          group by tsk.inq_key) tsk
     on (tsk.inq_key = oi.inq_key )
when matched then 
   update 
      set case_due_date = tsk.task_action_timestamp
    where case_due_date is null    -- as I understood only NULL values  
                                   -- need to be updated

注意:未经测试,因为未提供样本数据和所需结果。

答案 1 :(得分:0)

我认为您正在寻找有关选择的更新:

UPDATE (

  SELECT product_id, category_id 

  FROM product) st

SET st.category_id = 5 

WHERE st.category_id = 4;