获取有关 SQL 更新记录的详细信息

Posted

技术标签:

【中文标题】获取有关 SQL 更新记录的详细信息【英文标题】:Get details about SQL updated records 【发布时间】:2016-02-24 05:06:25 【问题描述】:

我需要关于逻辑的建议。应用程序中有一个更新查询,如下所示

UPDATE TABLE 
   SET FLAG = CASE 
                WHEN FLAG = 'IP' THEN 'P' 
                WHEN FLAG = 'IH' THEN 'H' 
                WHEN FLAG = 'IM' THEN 'M' 
              END 
WHERE ADJUSTMENT_ID IN (SELECT Query )

此更新从返回void 的Java 函数执行。

现在我还需要获取更新记录的详细信息(表 TABLE 中的几列)并从函数返回 LIST 而不是 void

由于性能原因,不能先运行 SELECT,然后在循环中更新记录。使用单个 UPDATE 语句更新记录,因为它应该运行得更快。

我有哪些选择可以保持可比性能?我应该使用存储过程吗?

【问题讨论】:

不相关,但是:如果flag 包含除IPIHIM 之外的任何其他值,则该列将更新为null。如果where 子句可能选择具有其他值的行,则应在case 语句中添加else flag 谢谢,查询中的 where 子句可以解决这个问题。我错过了提到这一点。这个条件存在于 WHERE 子句AND FLAG IN ('IP','IH','IM') 【参考方案1】:
SELECT ... FROM FINAL TABLE (UPDATE ....)

将完成这项工作。由于是单条 SQL 语句,性能也不错。

另请参阅 http://www.idug.org/p/bl/et/blogid=278&blogaid=422

【讨论】:

非常感谢,它可以在命令提示符下工作。在 Java 中,对于 PreparedStatement ,我们使用 executeUpdate()for SQL UPDATE 而对于 SQL SELECT 我们使用 executeQuery() 那么这里将使用哪一个?我猜应该是executeQuery(),我不确定你是否是 Java 人。 executeQuery() 在我执行 UPDATEFINAL TABLE 时为我工作

以上是关于获取有关 SQL 更新记录的详细信息的主要内容,如果未能解决你的问题,请参考以下文章