Как вернуть набор результатов таблицы в DB2-LUW без использования курсора? - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь создать хранимую процедуру в DB2-LUWv10.5. Мне нужно вернуть набор результатов таблицы без использования курсора (WITH RETURN).

Я использую приведенный ниже код в DB2-LUWv10.5. Когда я использую подход 2, он работает нормально и возвращает ожидаемый результат как выходной, то есть зарплату и премии всех сотрудников. Однако, когда я использую подход 1, он выдает ошибку.

Обнаружены ошибки:

  1. "," ожидалось вместо ";".
  2. "Зарплата, бонус", похоже, неуместна.
  3. Конец текста был достигнут после "p1".

Подход 1:

CREATE PROCEDURE  read_emp()
  SPECIFIC read_emp
  LANGUAGE SQL 
  DYNAMIC RESULT SETS 1

  p1:  BEGIN

      SELECT salary, bonus
      FROM employee;

  END p1

Подход 2:

  CREATE PROCEDURE  read_emp()
  SPECIFIC read_emp
  LANGUAGE SQL 
  DYNAMIC RESULT SETS 1

  p1:  BEGIN

DECLARE c_emp CURSOR WITH RETURN FOR
      SELECT salary, bonus
      FROM employee;

    OPEN c_emp;

  END p1

Ожидаемый результат -

Salary Bonus
25000  2500
30000  3000
50000  5000
40000  4000
45000  4500

1 Ответ

0 голосов
/ 02 апреля 2019

Ваш «Подход 1» является недопустимым синтаксисом, и Db2 отклонит его, потому что это дизайн.

Хранимая процедура, которая хочет вернуть набор результатов с помощью синтаксиса dynamic result set, должна объявить и открыть хотя бы один курсор.

Но хранимая процедура не обязательно должна использовать синтаксис динамического набора результатов. Хранимая процедура может свободно использовать параметр OUTPUT, который является типом данных со слабым типом курсора или со строго типизированным курсором. Однако хранимая процедура должна по-прежнему открывать курсор, просто чтобы она могла передать открытый курсор обратно в качестве параметра. Тем не менее, вызывающему абоненту все равно нужно будет использовать этот курсор.

Пользовательские функции могут возвращать таблицы, это альтернативный подход, поэтому вызывающим пользователям не нужно использовать явные курсоры для доступа к полученным данным.

...