【问题标题】:Oracle, Updating multiple rows in one query, using prepared statementOracle,在一个查询中更新多行,使用准备好的语句
【发布时间】:2016-04-06 07:58:24
【问题描述】:

我知道您可以通过使用在查询中插入多行

  INSERT ALL
  INTO mytable (column1, column2, column_n) VALUES (?,?,?)
  INTO mytable (column1, column2, column_n) VALUES (?,?,?)
  INTO mytable (column1, column2, column_n) VALUES (?,?,?)
  SELECT * FROM dual;

是否还有基于值的更新方法?所以会是这样的

  UPDATE ALL
  SET mytable (column1, column2, column_n) VALUES (?,?,?)
  SET mytable (column1, column2, column_n) VALUES (?,?,?)
  SET mytable (column1, column2, column_n) VALUES (?,?,?)
  WHERE ID= ?
  SELECT * FROM dual;

例如我有一个评论表

       reviewid      bookid     authorname   authoremail
          1            1           peter        wdwdd
          2            1           jane         dwdwdw
          3            1           mary         dwdw

是否可以在 bookid = "1" 的情况下进行多次更新?

【问题讨论】:

  • 我不完全理解你的问题,但也许你只需要update
  • 我不明白。您是否尝试将多行更新为相同的值或不同的值?您可以在更新之前和之后添加示例表数据吗?
  • 使用此链接orafaq.com/node/2450
  • 仍然不清楚,部分原因是您没有显示绑定值或表格之后的样子。你提议的update all 有三组绑定变量,那它们是什么?似乎假设给定的bookid 恰好有三行,并暗示您希望用不同的值更新每一行 - 但它如何知道哪些值用于哪一行?如果您将它们全部设置为相同的值,那么简单的update 有什么问题?

标签: sql oracle sql-update prepared-statement


【解决方案1】:

你可以使用MERGE:

MERGE INTO reviewtable r
USING ( SELECT 1 AS reviewid,
               1 AS bookid,
               'peter smith' AS name,
               'p.smith@email' AS email
        FROM   DUAL
        UNION ALL
        SELECT 2, 1, 'jane blogs', 'j.blogs@email' FROM DUAL
        UNION ALL
        SELECT 3, 1, 'mary adams', 'm.adams@email' FROM DUAL
      ) src
ON    ( r.bookid = src.bookid AND r.reviewid = src.reviewid )
WHEN MATCHED THEN UPDATE
  SET authorname  = src.name,
      authoremail = src.email;

【讨论】:

    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多