【问题标题】:DB2 Procedures return result set after for loopDB2 过程在 for 循环后返回结果集
【发布时间】:2016-01-20 10:24:33
【问题描述】:

我目前正在 IBM i 5 V7R1 上编写 SQL 过程。 如果我想在我的 for 循环之后返回一个结果集,我将无法创建该过程。 这是代码:

create or replace procedure test1()
    DYNAMIC RESULT SETS 1 
    LANGUAGE SQL 
    SPECIFIC EDVVAEH1.test1 
    NOT DETERMINISTIC 
    MODIFIES SQL DATA 
    CALLED ON NULL INPUT 
    SET OPTION  ALWBLK = *ALLREAD , 
    ALWCPYDTA = *OPTIMIZE , 
    COMMIT = *NONE , 
    DECRESULT = (31, 31, 00) , 
    DFTRDBCOL = *NONE , 
    DYNDFTCOL = *NO , 
    DYNUSRPRF = *USER , 
    SRTSEQ = *HEX   
    proc: BEGIN 
    DECLARE x VARCHAR(255);
    DECLARE return_cur CURSOR with return  FOR 
        select * from sysibm.sysdummy1;
    loop1: for record as C1 cursor for 
        SELECT TABLE_NAME
        from qsys2.systables
    DO 
    SET x = record.table_name;
    END FOR loop1;
    open return_cur;
    END proc

正如选项定义的那样,我想在两个循环之后返回一个结果集,但它不允许我创建这个过程。
错误是 -104 标记:“语句结束”无效,但一切都在那里 :(

【问题讨论】:

  • 我建议查看 SQL 语法...DB2 for i SQL Reference 7.1
  • 我花了几个小时阅读这篇文章......
  • 你是如何运行语句的?当我运行您在 iNav“运行 SQL 脚本”中提供的内容时,我得到的唯一错误是关于“X”的缺少声明。如果我为 X 添加一个 DECLARE,它会创建得很好。
  • 我会在星期一试一试,但我们工作中都有我的问题。
  • 我用 X 的声明试过了...同样的问题。供应商代码 -104 ... 声明结尾无效。

标签: sql stored-procedures db2 ibm-midrange


【解决方案1】:

我似乎找到了问题的根本原因,但我无法解决它。 据我所知,我的 i Access 的 for 语句有问题。 我将语句复制到数据库开发视图中的 RDi 9.1 并在那里运行。我还设置了一个不同的语句结束命令,之后我就可以创建我的过程了。

现在我需要等到公司中的某个人可以为我提供 PTF 以供客户访问。我已经尝试安装 IBM i 提供的所有 PTF,但没有任何改进...

如果有人有想法,我可以在哪里下载 PTF 供客户端访问,请给我一个提示。 IBM 站点对我来说是不可能的,因为我没有注册 IBM i。

谢谢。

【讨论】:

  • 如果您运行的是 Windows,请参阅 Latest service packs for supported releases。但是如果您的服务器的 DB2 组级别只有“2”,那么服务器本身似乎也很可能有些不可靠。
  • 我刚刚意识到“2”对于您的 DB2 小组来说并不是一个有意义的级别。之前的评论中有错误的 PTF 编号,直到现在我才注意到。
  • 好的,我在 IBm ftp 文件夹中找到了正确的服务包。从现在开始,我的客户端访问正常,我知道从哪里获取更新。谢谢大家一百万
猜你喜欢
  • 2015-03-06
  • 2018-06-05
  • 2019-03-25
  • 1970-01-01
  • 2017-09-30
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多