批量在准备好的语句中运行多个查询

时间:2019-03-08 04:56:44

标签: java sql db2 prepared-statement

我有一种情况,如果DB2中不存在记录,我想插入记录。如果已经存在,则将is_active列更新为现有行的0,并插入is_active为1的新行。

我无法使用merge into,因为在匹配的部分中无法运行2个查询。

我如何批量实现这一目标。

如果我要一个一个地运行查询,我可以运行它们。但是由于有流媒体,并且每秒约有500msg,我想分批处理

如果使用语句,我们可以做到

statement.addBatch(sql1) statement.addBatch(sql2)

完成上述操作后,我们说要执行500次 statement.excuteBatch()

但是我们正在准备的语句中寻找类似的内容。当我们尝试以与语句相同的方式执行操作时,就会失败

1 个答案:

答案 0 :(得分:0)

您可以将2个或多个数据更改语句合并为一个语句,但这是SELECT语句,您不能在addBatch方法中使用。
Retrieval of result sets from an SQL data change statement
但是,您只能在after update方法中使用insert触发器和addBatch语句。

CREATE TABLE TEST
(
  ID INT NOT NULL GENERATED ALWAYS AS IDENTITY
, KEY INT NOT NULL
, IS_ACTIVE INT NOT NULL
) IN USERSPACE1;

CREATE TRIGGER TEST_AIR 
AFTER INSERT ON TEST
REFERENCING NEW AS N
FOR EACH ROW
UPDATE TEST T SET IS_ACTIVE=0 WHERE T.KEY=N.KEY AND T.ID<>N.ID AND T.IS_ACTIVE<>0;

INSERT INTO TEST (KEY, IS_ACTIVE) VALUES (1, 1);
INSERT INTO TEST (KEY, IS_ACTIVE) VALUES (1, 1);
SELECT * FROM TEST;

|ID         |KEY        |IS_ACTIVE  |
|-----------|-----------|-----------|
|1          |1          |0          |
|2          |1          |1          |