如何使用 SQL 使用 DB2 中的存储过程插入表?

Posted

技术标签:

【中文标题】如何使用 SQL 使用 DB2 中的存储过程插入表?【英文标题】:How to insert into a table using stored procedures in DB2 using SQL? 【发布时间】:2013-02-12 17:52:45 【问题描述】:

我想知道如何使用 SQL 使用 DB2 中的存储过程插入表。 我创建了一个如下表:

create table ADCLIBT.Itest
(ITNBR CHAR(15) CCSID 65535 NOT NULL DEFAULT '');

此表包含项目列表。使用此列表,我想将各种其他字段插入另一个表。但是,为了举例,假设我只想使用游标一一插入这些值。 我写的存储过程如下:

create procedure ADCLIBT.itest1()
    LANGUAGE SQL
BEGIN
    DECLARE itemno char(15);
    DECLARE END_TABLE INT DEFAULT 0;
    DECLARE not_found CONDITION FOR SQLSTATE '20000';
    DECLARE c CURSOR FOR 
        select ITNBR from ADCLIBT.ITEMAT;
    DECLARE CONTINUE HANDLER FOR not_found
    SET END_TABLE = 1;

    open c;
    fetch from c into itemno;
    WHILE END_TABLE = 0 DO
        insert into ADCLIBT.ITEST
                (ITNBR)
                values
        (select a.ITNBR from ADCLIBT.ITEMAT a where ITNBR=itemno GROUP BY a.ITNBR);
    END WHILE;
    Close c;
END;

这给了我一个无限循环。谁能告诉我如何停止无限循环并插入这些记录。我想使用光标是因为我想进一步使用itemno 来比较并获得单个结果。

【问题讨论】:

【参考方案1】:

您正在打开游标,但在此期间未提取,您必须在游标的同时进行提取。这是 IBM 文档中的一个示例。

CREATE PROCEDURE sum_salaries(OUT sum INTEGER) LANGUAGE SQL
BEGIN
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE p_sum INTEGER;
DECLARE p_sal INTEGER;
DECLARE c CURSOR FOR SELECT SALARY FROM EMPLOYEE;

 SET p_sum = 0;

 OPEN c;

 FETCH FROM c INTO p_sal;

 WHILE(SQLSTATE = '00000') DO
    SET p_sum = p_sum + p_sal;
    FETCH FROM c INTO p_sal; 
 END WHILE;

 CLOSE c;

 SET sum = p_sum;

END%

【讨论】:

是的,如果你不这样做,你就只是在第一行。 感谢您的及时回复。我试过了,但它仍然给了一个无限循环。 '打开c;从 c 获取到 itemno; WHILE END_TABLE = 0 DO 插入 ADCLIBT.ITEST (ITNBR) 值(从 ADCLIBT.ITEMAT a 中选择 a.ITNBR,其中 ITNBR=itemno GROUP BY a.ITNBR);从 c 获取到 itemno;结束;关闭 c;'大约有 10k 行 对不起...我不知道发生了什么。 你能告诉我在记录全部通过后我应该使用continue 处理程序还是EXIT 处理程序退出表? 终于明白了,怎么做。 DECLARE not_found CONDITION FOR SQLSTATE '20000'; was giving a problem , so I just used the normal continue` 处理程序与 NOT FOUND

以上是关于如何使用 SQL 使用 DB2 中的存储过程插入表?的主要内容,如果未能解决你的问题,请参考以下文章

db2存储过程动态sql被截断

从 DB2 存储过程出口处理程序传播默认 SQL 异常

SQL插入,使用合并存储过程更新

处理 DB2 中存储过程或 SQL 中的每一行

使用存储过程将数据从 SQL 表插入 Excel

如何比较两个表的列并将值插入到基于 SQL Server 中存储过程中的比较的新表中