程序中两个光标顺序

时间:2018-10-23 07:13:09

标签: sql stored-procedures db2 cursor

我在操作过程中遇到以下问题:

CREATE PROCEDURE TEST() 
LANGUAGE SQL
BEGIN

DECLARE V_TEST VARCHAR(100);
DECLARE V_TEST_EXT VARCHAR(100);
DECLARE SQLCODE INTEGER DEFAULT -1;
DECLARE RET_CODE INTEGER DEFAULT -2;
DECLARE LIST_CMD VARCHAR(512);
DECLARE LIST_CMD_EXT VARCHAR(512);

DECLARE CUR_TEST CURSOR WITH RETURN FOR LIST_STMT;
DECLARE CUR_TEST_EXT CURSOR WITH RETURN FOR LIST_EXT_STMT;

DECLARE CONTINUE HANDLER FOR SQLEXECPTION SET RET_CODE = SQLCODE;

SET LIST_CMD = 'SELECT TEST FROM TESTTAB';
PREPARE LIST_STMT FROM LIST_CMD;

OPEN CUR_TEST;
FETCH CUR_TEST INTO V_TEST;
    WHILE (RET_CODE <> 100) DO
        FETCH CUR_TEST INTO V_TEST;
    END WHILE;
CLOSE CUR_TEST;

SET LIST_CMD_EXT = 'SELECT TEST FROM TESTTAB';
PREPARE LIST_STMT_EXT FROM LIST_CMD_EXT;

OPEN CUR_TEST_EXT;
    FETCH CUR_TEST_EXT INTO V_TEST_EXT;
    WHILE (RET_CODE <> 100) DO
        FETCH CUR_TEST_EXT INTO V_TEST_EXT;
    END WHILE;
CLOSE CUR_TEST_EXT;

END;

我遇到的问题是该过程执行第一个光标循环,但忽略了第二个。我尝试将BEGIN和END添加到每个循环中,但这也无济于事。

我正在运行DB2 v10.5 Windows。我需要以此作为程序。有什么方法可以使过程同时运行两个循环?

谢谢您的帮助。-

1 个答案:

答案 0 :(得分:2)

在处理第二个游标之前,不要重置RET_CODE变量。 使用类似这样的内容:

{
  "catRef": {
    "id": "7b342789-e527-42a6-997b-cfe2fb6bdb07",
    "typename": "cat.beacon.Beacon"
  },
  "payload":{
    "position": null,
  }
}

顺便说一句,如果您在过程中处理此游标,则不要使用'WITH RETURN'子句声明游标。