Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4 / 9 сообщений из 9, страница 1 из 1
08.12.2009, 10:51
    #36353441
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
Доброго дня!

Такая ситуация в процедуре:
1. создаю виртуальную таблицу
2. создаю курсор1 на запрос других таблиц
2.1. открываю его
2.2. считываю из курсора и записываю в свою вирт таблицу данные
3. закрываю курсор1
4. делаю деаллокейт курсор1

5. создаю курсор2 на основе моей вирт таблицы
6. проверяю @@sqlstatus и он равен 2
7. открываю курсор2
8. проверяю @@sqlstatus и он опять равен 2

вобщем прочитать курсор2 я не могу..
:(


Подскажите плиз почему @@sqlstatus = 2?
...
Рейтинг: 0 / 0
08.12.2009, 11:33
    #36353587
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
есть подозрение что при проходе по первому курсору и упираясь в конец, @@sqlstatus выставляется в 2, обозначая конец данных, и затем в этом состоянии находится...
но почему он не обнуляется при закрытии курсора или создании нового????
...
Рейтинг: 0 / 0
08.12.2009, 12:13
    #36353723
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
Вопрос конечно банальный, но все-таки - данные-то есть в вашей вирутальной таблице?
...
Рейтинг: 0 / 0
08.12.2009, 12:48
    #36353849
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
Mikle83Вопрос конечно банальный, но все-таки - данные-то есть в вашей вирутальной таблице?
есть
...
Рейтинг: 0 / 0
08.12.2009, 12:59
    #36353898
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
метод тупой но если попробовать перед закрытием первого курсора считать первую его запись, т.е. чтобы статус был <>2 после окончания работы с курсором?

Таким образом выявим кто давит на статус, то ли первый курсор (если все заработает), то ли второй как-то (если все продолжит не работать).
...
Рейтинг: 0 / 0
09.12.2009, 17:26
    #36357291
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
Mikle83метод тупой но если попробовать перед закрытием первого курсора считать первую его запись, т.е. чтобы статус был <>2 после окончания работы с курсором?

Таким образом выявим кто давит на статус, то ли первый курсор (если все заработает), то ли второй как-то (если все продолжит не работать).

помоему фича со скроллингом курсора появилась только в 15-ой асешке...
или как-то можно???
...
Рейтинг: 0 / 0
10.12.2009, 07:22
    #36358113
W357
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
А после открытия второго курсора FETCH делали?
...
Рейтинг: 0 / 0
10.12.2009, 17:55
    #36359747
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
W357А после открытия второго курсора FETCH делали?
если делать после открытия второго курсора фетч, то он делается и статус переводится в ноль.
но я изначально делал все как в инструкции

while @@sqlstatus = 0
begin
fetch cur into @a, @b
...
end

и при таком варианте у меня последняя запись дублировалась, вставил проверку на sqlstatus перед вставкой и обошел дублирование, но второй курсор у меня сразу был со статусом ноль и это все условие уже не срабатывало.
в итоге сделал иначе - запрос на кол-во строк в курсоре, затем тот же while, но с заданым количеством циклов и все заработало как надо.

знаю что @@sqlstatus надо бы все равно проверять, но...
...
Рейтинг: 0 / 0
10.12.2009, 18:08
    #36359771
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
Imperousно я изначально делал все как в инструкцииЛибо неправильно читаешь, либо неправильная инструкция.

@@sqlstatus хранит в себе код завершения последней команды работавшей с данными. Если ты начинаешь while цикл с проверки на @@sqlstatus убедись что перед приходом в этот цикл у тебя переменная встала в подходящее для входа в цикл значение.

Какой язык в школе учил? Бейсик? Вот тебе пример на Бейсике:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
i =  0 
do while i =  0 
   print "A"
   i = i +  1 
loop

do while i =  0 
   print "B"
   i = i +  1 
loop
Угадай что эта программа напечатает?
Вот в T-SQL все тоже самое.

И кстати да, открытие курсора не является работой с данными а значит не изменяет @@sqlstatus, а fetch - уже является и изменяет.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4 / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]