Вы должны запустить оператор 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
) и возвращать поднабор результатов с наименьшим рангом.