powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Не могу разобраться с ошибкой :(
8 сообщений из 8, страница 1 из 1
Не могу разобраться с ошибкой :(
    #33567819
AlexanderF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASE версия 12.0
У меня есть скрипт в процедуре

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
declare cursor_for_num_set_fr cursor for
   select num_set_fr from #temp_num_set_fr order by num_set_fr

open cursor_for_num_set_fr

fetch cursor_for_num_set_fr into @num_set_fr

select @num_set_fr_old= 0 
while @@sqlstatus= 0 
begin
   if @num_set_fr <> @num_set_fr_old
   begin

      declare cursor_for_emp cursor for
         select s.amount_in_car,m.drawing
         from dbo.xxoi_msk_set s, dbo.xxoi_msk m 
         where s.num_set=@num_set_fr and m.id=s.id_msk and m.type_msk='up'

      open cursor_for_emp

      fetch cursor_for_emp into @count_emp, @emp

      if @@sqlstatus= 0 
      begin
         update #temp_num_set_fr
         set emp_1=@emp, count_emp1=@count_emp
         where #temp_num_set_fr.num_set_fr=@num_set_fr
         fetch cursor_for_emp into @count_emp, @emp         
      end
      if @@sqlstatus= 0 
      begin
         update #temp_num_set_fr
         set emp_2=@emp, count_emp2=@count_emp
         where #temp_num_set_fr.num_set_fr=@num_set_fr
         fetch cursor_for_emp into @count_emp, @emp                  
      end
      if @@sqlstatus= 0 
      begin
         update #temp_num_set_fr
         set emp_3=@emp, count_emp3=@count_emp
         where #temp_num_set_fr.num_set_fr=@num_set_fr
      end
      close cursor_for_emp
      select @num_set_fr_old=@num_set_fr
   end

   fetch cursor_for_num_set_fr into @num_set_fr
end

close cursor_for_num_set_fr

Во время выполнения происходит ошибка:Error: Number (563) Severity (16) State (2) Server (....) Procedure (....) There is already another cursor with the name 'cursor_for_emp' at the nesting level '1'.

С чем связана ошибка??? С тем что курсор 'cursor_for_emp' несколько раз декларируется? Если это нельзя делать, то как обойти это ограничение, если мне этот курсор надо использовать внутри цикла? Или это связано с тем, что тут 2 курсора? Или может что еще?:(
...
Рейтинг: 0 / 0
Не могу разобраться с ошибкой :(
    #33567834
AlexanderF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, тут какое то кривоватое форматирование, поэтому вложенность не наглядна
...
Рейтинг: 0 / 0
Не могу разобраться с ошибкой :(
    #33567871
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это связано с тем что вы не делаете dealocate cursor
...
Рейтинг: 0 / 0
Не могу разобраться с ошибкой :(
    #33568441
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
declare cursor (второй) нужно вынести из внешнего цикла.
...
Рейтинг: 0 / 0
Не могу разобраться с ошибкой :(
    #33569478
AlexanderF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivdeclare cursor (второй) нужно вынести из внешнего цикла.
Нельзя его вынести, т.к. во внешнем цикле определяется параметр, по которому работает второй курсор...
А deallocate тут поможет? Его надо ставить до close второго курсора, или после?
...
Рейтинг: 0 / 0
Не могу разобраться с ошибкой :(
    #33569718
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deall ocate cursor ( в предыдущем посте была ошибка )

это закрывающая комманда для declare cursor

как close для open

если делать declare cursor и не делать deallocate cursor ,
то курсор все еще остается обьявленным и обьявление его во второй раз дает именно эту ошибку!


пример стандартного курсора:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare mycursor cursor for 
select_statement

open mycursor
fetch mycursor into @var,...
while @@sqlstatus= 0  begin
	--processing selected row
	fetch mycursor into @var,...
end
close mycursor
deallocate cursor mycursor
...
Рейтинг: 0 / 0
Не могу разобраться с ошибкой :(
    #33569755
AlexanderF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное :)
...
Рейтинг: 0 / 0
Не могу разобраться с ошибкой :(
    #33569905
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexanderFНельзя его вынести, т.к. во внешнем цикле определяется параметр, по которому работает второй курсор...


А вы подумайте, может там можно вообще один курсор сделать вместо двух вложенных.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Не могу разобраться с ошибкой :(
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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