Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Не могу разобраться с ошибкой :( / 8 сообщений из 8, страница 1 из 1
27.02.2006, 13:48
    #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
27.02.2006, 13:52
    #33567834
AlexanderF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу разобраться с ошибкой :(
К сожалению, тут какое то кривоватое форматирование, поэтому вложенность не наглядна
...
Рейтинг: 0 / 0
27.02.2006, 14:00
    #33567871
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу разобраться с ошибкой :(
это связано с тем что вы не делаете dealocate cursor
...
Рейтинг: 0 / 0
27.02.2006, 16:28
    #33568441
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу разобраться с ошибкой :(
declare cursor (второй) нужно вынести из внешнего цикла.
...
Рейтинг: 0 / 0
28.02.2006, 07:18
    #33569478
AlexanderF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу разобраться с ошибкой :(
MasterZivdeclare cursor (второй) нужно вынести из внешнего цикла.
Нельзя его вынести, т.к. во внешнем цикле определяется параметр, по которому работает второй курсор...
А deallocate тут поможет? Его надо ставить до close второго курсора, или после?
...
Рейтинг: 0 / 0
28.02.2006, 09:48
    #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
28.02.2006, 09:57
    #33569755
AlexanderF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу разобраться с ошибкой :(
Спасибо огромное :)
...
Рейтинг: 0 / 0
28.02.2006, 10:43
    #33569905
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу разобраться с ошибкой :(
AlexanderFНельзя его вынести, т.к. во внешнем цикле определяется параметр, по которому работает второй курсор...


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


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