Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Курсоры в ASE объясните / 4 сообщений из 4, страница 1 из 1
05.09.2006, 09:02
    #33963997
W357
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE объясните
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
05.09.2006, 10:04
    #33964112
W357
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE объясните
Скорее всего я делал неправильно.
Сделал по другому:
в 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
05.09.2006, 11:39
    #33964515
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE объясните
for update вполне можно заменить на for read only
...
Рейтинг: 0 / 0
05.09.2006, 12:06
    #33964662
W357
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсоры в ASE объясните
Сергей Васкецовfor update вполне можно заменить на for read only
Нет.
Я ошибся там, update происходит той же таблицы что и выборка курсора.
т.е. gTabRequisit_loader это и есть - Table
я специально написал Table, чтобы упростить название таблицы, а потом забыл поменять в update
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Курсоры в ASE объясните / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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