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

时间:2013-02-12 17:52:45

标签: sql stored-procedures cursor db2

我想知道如何使用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 个答案:

答案 0 :(得分: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%