使用 LOOP 的 Db2 多插入
Db2 Multi Insert using LOOP
我正在尝试编写一个循环,主要是为 DB2 Z/OS 执行批量插入。
参考这个后,我尝试使用这个:
BEGIN
DECLARE varcnt;
set varcnt int DEFAULT 0;
WHILE varcnt <= 10 DO
insert into HEROI.TESTD (PK,XML_TYPE) values(varcnt+1,'<test>Hello World</test>');
SET varcnt = varcnt + 1;
END WHILE ;
END;
但是上面给出了如下错误:
非法符号“VARCNT”。一些可能合法的符号是: SECTION。 SQLCODE=-104,SQLSTATE=42601,DRIVER=4.28.11 SQL代码:-104,SQL州:42601
错误发生在:
开始
声明 varcnt
我使用了 DBeaver、TOAD 和 SQL Squirrel 客户端,认为这可能是客户端问题,但似乎并非如此。我的 DB2 Z/OS 版本是 DSN12015.
如果能在这里得到一些关于我如何多次 运行 这条 INSERT 语句的帮助,那就太好了。
Compound statements 在 Db2 for z/OS 中仅在例程和触发器中受支持。
您不能将它们用作独立语句。
您的 DECLARE
和 SET
语句是错误的 - 您没有在 DECLARE
中提供数据类型,而是在 SET
中提供数据类型。应该是:
DECLARE varcnt int DEFAULT 0;
至于你的情况。你可以用一条语句做同样的事情:
insert into HEROI.TESTD (PK,XML_TYPE)
WITH T (I) AS
(
SELECT 0 FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT I+1 FROM T WHERE I < 10
)
SELECT I, '<test>Hello World</test>'
FROM T
谢谢马克,您的解决方案和文档参考真的很有帮助。
我想添加关于生成数据的存储过程:
CREATE PROCEDURE HEROI.SP_INSERT
LANGUAGE SQL
DISABLE DEBUG MODE
BEGIN
DECLARE cnt int DEFAULT 0;
WHILE cnt <= 1000000 DO
insert into HEROI.TESTD (PK,SMALLINT_TYPE) VALUES (cnt, 'Hello World');
COMMIT;
SET cnt = cnt + 1;
END WHILE ;
END
CALL HEROI.SP_INSERT;
我正在尝试编写一个循环,主要是为 DB2 Z/OS 执行批量插入。
参考这个
BEGIN
DECLARE varcnt;
set varcnt int DEFAULT 0;
WHILE varcnt <= 10 DO
insert into HEROI.TESTD (PK,XML_TYPE) values(varcnt+1,'<test>Hello World</test>');
SET varcnt = varcnt + 1;
END WHILE ;
END;
但是上面给出了如下错误:
非法符号“VARCNT”。一些可能合法的符号是: SECTION。 SQLCODE=-104,SQLSTATE=42601,DRIVER=4.28.11 SQL代码:-104,SQL州:42601 错误发生在: 开始 声明 varcnt
我使用了 DBeaver、TOAD 和 SQL Squirrel 客户端,认为这可能是客户端问题,但似乎并非如此。我的 DB2 Z/OS 版本是 DSN12015.
如果能在这里得到一些关于我如何多次 运行 这条 INSERT 语句的帮助,那就太好了。
Compound statements 在 Db2 for z/OS 中仅在例程和触发器中受支持。
您不能将它们用作独立语句。
您的 DECLARE
和 SET
语句是错误的 - 您没有在 DECLARE
中提供数据类型,而是在 SET
中提供数据类型。应该是:
DECLARE varcnt int DEFAULT 0;
至于你的情况。你可以用一条语句做同样的事情:
insert into HEROI.TESTD (PK,XML_TYPE)
WITH T (I) AS
(
SELECT 0 FROM SYSIBM.SYSDUMMY1
UNION ALL
SELECT I+1 FROM T WHERE I < 10
)
SELECT I, '<test>Hello World</test>'
FROM T
谢谢马克,您的解决方案和文档参考真的很有帮助。
我想添加关于生成数据的存储过程:
CREATE PROCEDURE HEROI.SP_INSERT
LANGUAGE SQL
DISABLE DEBUG MODE
BEGIN
DECLARE cnt int DEFAULT 0;
WHILE cnt <= 1000000 DO
insert into HEROI.TESTD (PK,SMALLINT_TYPE) VALUES (cnt, 'Hello World');
COMMIT;
SET cnt = cnt + 1;
END WHILE ;
END
CALL HEROI.SP_INSERT;