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

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

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

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

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

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

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

знаю что @@sqlstatus надо бы все равно проверять, но...
...
Рейтинг: 0 / 0
Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
    #36359771
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
9 сообщений из 9, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Создание курсора, почему @@sqlstatus = 2 ASE 12.5.4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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