获取有关 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 更新记录的详细信息的主要内容,如果未能解决你的问题,请参考以下文章

EF 更新条目时出错。有关详细信息,请参见内部异常。

接受用户的员工编号 从“员工”表中获取员工详细信息并将其存储到 PL SQL 记录类型变量并打印相同

有关 SQL Server 中的 SQL 查询提示的详细信息

更新条目时出错。有关详细信息,请参阅内部异常 [关闭]

Laravel:获取有关队列作业的详细信息

sql 有关ng-security-service的RE详细信息