DB2 (найден курсор) НЕВЕРНОЕ КЛЮЧЕВОЕ СЛОВО "НАЙДЕНО" - PullRequest
0 голосов
/ 16 января 2020

У меня серьезная проблема с DB2 Cursor. Когда я открываю его, я не могу знать, есть ли в нем какие-либо записи или нет?

А также я пишу свою хранимую процедуру в IBM® Data Studio версии 4.1.0.0

1 Ответ

2 голосов
/ 16 января 2020

Вы должны запустить оператор FETCH, чтобы проверить, есть ли записи в наборе результатов. Но вы не можете сделать это, так как вы возвращаете результат вызывающей стороне.

Итак, 1-е решение будет использовать, скажем, (Объявлено | Создано) Глобальную временную таблицу для INSERT SELECT в нее с проверкой, вставлены ли какие-либо строки (используя GET DIAGNOSTICS ()), а затем откройте в этом (C | D) GTT курсор * или курсор 2.

Вторым решением будет объединение обоих операторов выбора в один, как показано ниже:

SELECT T.*
FROM
(
  SELECT 
    RANK() OVER (ORDER BY NUMBER) RN
  , T.*
  FROM
  (
    SELECT 1 AS NUMBER, T1.*
    FROM SYSIBM.SYSDUMMY1 T1
    --WHERE 1=0
      UNION ALL
    SELECT 2 AS NUMBER, T2.*
    FROM SYSIBM.SYSDUMMY1 T2
  ) T
) T
WHERE RN=1;

Идея состоит в том, чтобы UNION оба набора результатов ранжировать их по постоянному значению столбца (в данном случае NUMBER) и возвращать поднабор результатов с наименьшим рангом.

...