DB2 SQLPL - Невозможно выйти из бесконечного цикла - PullRequest
1 голос
/ 01 марта 2020

У меня есть хранимая процедура, созданная для вычисления стандартного отклонения вручную, проходя каждую строку в Таблице сотрудников в Образце базы данных DB2 -

Однако процедура застряла в бесконечном l oop. Я не уверен, почему он застрял, поскольку я ожидал, что SQLSTATE не будет '00000' после прочтения последней строки в таблице и надеется выйти. В чем проблема? Как мне отладить? Как мне это исправить?

1 Ответ

2 голосов
/ 01 марта 2020

Переменная SQLSTATE сбрасывается после каждого оператора, кроме GET DIAGNOSTICS. Вот почему каждая проверка SQLSTATE должна следовать за FETCH немедленно. Существует еще один метод такой обработки al oop, основанный на обработчике исключений для условия NOT FOUND + переменная флага для установки там.
Ниже приведено одно из возможных решений.

OPEN cursor1;
FETCH FROM cursor1 INTO TEMP;
WHILE(SQLSTATE = '00000')
       DO
           SET SUM_SALARY = SUM_SALARY + TEMP;
           SET SUM_SALARY_SQUARED = SUM_SALARY_SQUARED + (TEMP * TEMP);
           SET NUM_ROWS = NUM_ROWS + 1;
           FETCH FROM cursor1 INTO TEMP;
       END WHILE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...