我有一种情况,如果DB2中不存在记录,我想插入记录。如果已经存在,则将is_active列更新为现有行的0,并插入is_active为1的新行。
我无法使用merge into,因为在匹配的部分中无法运行2个查询。
我如何批量实现这一目标。
如果我要一个一个地运行查询,我可以运行它们。但是由于有流媒体,并且每秒约有500msg,我想分批处理
如果使用语句,我们可以做到
statement.addBatch(sql1) statement.addBatch(sql2)
完成上述操作后,我们说要执行500次 statement.excuteBatch()
但是我们正在准备的语句中寻找类似的内容。当我们尝试以与语句相同的方式执行操作时,就会失败
答案 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 |