Итерация курсора в Sybase ASE, похоже, выполняет несколько циклов

Я создаю курсор с помощью оператора select, который вернет 4 значения (18, 13, 14 и 15). Сейчас я пытаюсь перебрать курсор и отобразить значение. Я ожидаю 4 оператора печати, но вижу гораздо больше.

Вот код:

PRINT '***** *****'
GO
DECLARE curs CURSOR FOR
  SELECT ID FROM CUSTOMER WHERE SSN LIKE '%1803'
GO
DECLARE @ID int
OPEN curs
  FETCH NEXT curs INTO @ID 
  WHILE @@sqlstatus = 0
  BEGIN
    PRINT '* current value: %1! ', @ID 
    FETCH NEXT curs INTO @ID
  END  
CLOSE curs
DEALLOCATE CURSOR curs
GO

Вот результат:

***** *****

* current value: 18 
* current value: 18 
* current value: 13 
* current value: 18 
* current value: 13 
* current value: 14 
* current value: 18 
* current value: 13 
* current value: 14 
* current value: 15 
* current value: 18 
* current value: 13 
* current value: 14 
* current value: 15

Это похоже на простую итерацию курсора, и я не могу понять, почему я вижу так много операторов печати, я хочу видеть только 18, 13, 14 и 15. Я использую Sybase ASE 15.5 и клиент Razor SQL. Может кто-то помочь мне с этим?

* Edit * Я не видел проблемы, когда использовал Sybase Central (для ASE). Результаты были противоречивыми, когда я использовал другие IDE.


person Kiran    schedule 10.11.2014    source источник


Ответы (1)


Во-первых, убедитесь, что вы всегда используете order by с любым SQL в настоящее время, чтобы обеспечить получение данных в том порядке, в котором вы ожидаете. Вы не знаете, как база данных оптимизирует запрос на сервере, поэтому будьте конкретны.

Также проверьте прямой выбор и проверьте, сколько строк соответствует "SSN LIKE"% 1803 ", чтобы начать перекрестную проверку количества строк по курсору.

person Rich Campbell    schedule 28.07.2017