Является ли этот курсор DB2 циклом? - PullRequest
0 голосов
/ 19 октября 2018

Судьба или удача Я работаю над преобразованием хранимых процедур DB2 в хранимые процедуры SQL Server.

Одна вещь, которую я не мог полностью понять в DB2, это курсоры 1 .Глядя на это и читая некоторую документацию, кажется, что это только оператор выбора.

-- DB2 stored procedure code
declare entity_cursor cursor with return for
select *
from TableName;

...
--a lot more cursors like above, and some other code
...

open entity_cursor;

Вопросы

  1. Я прав в своем предположении 2 что это только оператор select на самом деле , возвращающий набор результатов при открытии курсора?
  2. Если произошла ошибка до курсор открыт 3 , будет ли SP возвращать пустой набор результатов для entity_cursor?

1 : я знаю, что SQLСервер, на котором они обычно используются для выполнения операций со строками за строкой.
2 : Основано на чтении документации DB2 и немного на моих знаниях и интеллекте.
3 : К сожалению, я не могу полностью протестировать хранимую процедуру в DB2.

1 Ответ

0 голосов
/ 20 октября 2018

К вашему первому вопросу: как уже упоминалось в комментариях, открытие курсора не создает набор результатов, а просто структуру (указатель на a), позволяющую получить доступ к набору результатов с помощью оператора FETCH или его эквивалента.Более того, результирующий набор может даже не быть полностью материализован, когда вы начнете извлекать записи - это зависит от фактического запроса и различных параметров курсора.

На ваш второй вопрос: если ваша хранимая процедура возвращает, обычно или нет,перед открытием курсора его вызывающая сторона получит неинициализированную структуру курсора (которая будет вызывать исключение при попытке доступа к нему), а не пустой набор результатов.

...