获取有关 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
包含除IP
、IH
或IM
之外的任何其他值,则该列将更新为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()
在我执行 UPDATE
和 FINAL TABLE
时为我工作以上是关于获取有关 SQL 更新记录的详细信息的主要内容,如果未能解决你的问题,请参考以下文章
接受用户的员工编号 从“员工”表中获取员工详细信息并将其存储到 PL SQL 记录类型变量并打印相同