powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Курсоры в ASE объясните
4 сообщений из 4, страница 1 из 1
Курсоры в ASE объясните
    #33963997
W357
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASE 12.5.2

Хочу сделать обновляемый курсор. Я правильно делаю?

Код: 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.
declare crReq cursor for select LastName, MiddleName, FirstName, BirthDate from Table
for update of ErrCode

  open crReq
               
  fetch crReq into @ln, @mn, @fn, @bd

  while @@sqlstatus= 0     
  begin
    select @cnt = count(*) from Clients where LastName = @ln and MiddleName = @mn 
              and FirstName = @fn and BirthDate = @bd

    if @cnt> 1  ErrCode =  1 
    if @cnt< 1  ErrCode =  2 

    if @cnt= 1 
    begin
       ...
       Действия
       ...
    end

    fetch crReq into @ln, @mn, @fn, @bd
  end

close crReq
deallocate cursor crReq
...
Рейтинг: 0 / 0
Курсоры в ASE объясните
    #33964112
W357
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего я делал неправильно.
Сделал по другому:
в Table добавил поле identity и вытаскивал его в курсоре вместе с остальными.
fetch'ю его в переменную и потом делаю update по этому ID.

Код: 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.
declare crReq cursor for select ID, LastName, MiddleName, FirstName, BirthDate from Table
for update of ErrCode

  open crReq
               
  fetch crReq into @rid, @ln, @mn, @fn, @bd

  while @@sqlstatus= 0     
  begin
    select @cnt = count(*) from Clients where LastName = @ln and MiddleName = @mn 
              and FirstName = @fn and BirthDate = @bd

    if @cnt> 1  update gTabRequisit_loader set ErrCode =  1  where ReqId = @rid
    if @cnt< 1  update gTabRequisit_loader set ErrCode =  2  where ReqId = @rid

    if @cnt= 1 
    begin
       ...
       Действия
       ...
    end

    fetch crReq into @rid, @ln, @mn, @fn, @bd
  end

close crReq
deallocate cursor crReq
Работает нормально.
...
Рейтинг: 0 / 0
Курсоры в ASE объясните
    #33964515
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
for update вполне можно заменить на for read only
...
Рейтинг: 0 / 0
Курсоры в ASE объясните
    #33964662
W357
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецовfor update вполне можно заменить на for read only
Нет.
Я ошибся там, update происходит той же таблицы что и выборка курсора.
т.е. gTabRequisit_loader это и есть - Table
я специально написал Table, чтобы упростить название таблицы, а потом забыл поменять в update
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Курсоры в ASE объясните
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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