当前位置: 首页 > 知识库问答 >
问题:

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

周枫涟
2023-03-14

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

颜阳炎
2023-03-14

您正在打开光标,但中途未完成操作,必须在光标的中途执行提取操作。这里是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%
 类似资料:
  • 问题内容: 我为几个表创建触发器。触发器具有相同的逻辑。我将要使用一个通用的存储过程。但是我不知道如何处理 插入 和 删除的 表。 例子: 问题答案: 您可以使用表值参数存储触发器中插入/删除的值,并将其传递给proc。例如,如果您在proc中所需的全部是UNIQUE : 然后从触发器中传递插入/删除的ID,例如:

  • 问题内容: 如何在MySQL存储过程中构建和使用动态SQL? 问题答案: 我不相信MySQL支持动态sql。您可以执行类似但不同的“准备”语句。 这是一个例子: 准备好的语句通常用于查看给定查询的执行计划。由于它们是使用 execute 命令执行的,并且可以将 sql 分配给变量,因此您可以近似地估计一些与动态sql相同的行为。 这是一个很好的链接: 不要忘记使用最后一行取消分配! 祝好运!

  • 我试图使用RazorSQL客户端在DB2数据库中创建一个存储过程,但遇到了以下错误: 块引用错误:字符、标记或子句无效或丢失。DB2SQL错误:SQLCODE=-104, SQLSTATE=42601, SQLERRMC=SELECT 存储过程代码为:

  • 问题内容: 我想以这种格式拆分一个字符串Quote: 。实际上,这个字符串只是一个样本,我的原始字符串非常大。我不是要说的是,如果我打破了这个字符串,那么在分割字符串之后,我还需要做多少个变量才能捕获数据,我想将其插入包含日期和年龄列的数据表中吗?我使用什么概念?(我正在从Web服务获取此字符串)在此先感谢。 问题答案: 通常,我建议编写一个CLR函数,该函数通过regex或SQL表值函数拆分字符

  • 问题内容: 这个问题已经在这里有了答案 : 如何在存储过程中一次全部插入两个表?[重复] (1个答案) 7年前关闭。 我有2张桌子,和: : : 我想编写一个存储过程,该过程将插入两个表中 更准确地说,是插入with ,它将返回用作的外键。 我进行了很多搜索,但未找到任何解决方案。 问题答案: 如下图所示。在这种情况下,您可以用来获取最后一个自动生成的ID以及此存储过程的作用域:

  • 本文向大家介绍如何在COBOL-DB2程序中使用单个INSERT命令在DB2表中插入多行?,包括了如何在COBOL-DB2程序中使用单个INSERT命令在DB2表中插入多行?的使用技巧和注意事项,需要的朋友参考一下 如果要使用单个INSERT命令在DB2表中插入多行,则必须定义主机变量数组并将要插入的行数据移动到该数组中。我们需要在工作存储部分中使用配置S9(4)COMP定义另一个变量,该变量将保