Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

Что происходит с открытым курсором, если очистить "его" таблицу?   Найти похожие ветки 

 
Курдль ©   (2004-05-04 20:21) [0]


begin
 declare CNTR_CURSOR cursor for select * from CNTR_TABLE;
 open CNTR_CURSOR;
 delete from CNTR_TABLE;
 CNTR_LOOP:
 loop
   fetch next CNTR_CURSOR into ...;
   --Если конец набора данных - покинуть петлю
   if sqlstate = "02000"
     then leave CNTR_LOOP;
     message "нет ни одной записи" to log;
   end if;
   message "обработана запись" to log;
 end loop CNTR_LOOP;
 close CNTR_CURSOR;
end;

Если выделенная строка отсутствует, лог выглядит так:
обработана запись
обработана запись
....
обработана запись


Если выделенная строка присутствует:
нет ни одной записи
Что выходит? Изменения в "управляющей таблице(-ах)" после открытия курсора ведут к необратимым изменениям набора данных, которые принял курсор?  :(


 
Andriy Tysh ©   (2004-05-05 10:10) [1]

В MS SQL есть Dynamic и Static курсоры. Первый - реагирует на какие-либо изменеия в своём наборе данных если изменение произошло в том месте, куда он ещё не дошёл, второй делает "фотку" и далее его ничего не тревожит.


 
Курдль ©   (2004-05-05 10:13) [2]

А можно навскидочку весь синтаксис (у меня Sybase, но попробую применить, или хоть доку порыть в нужном направлении). Но вообще-то это странно - нафиг он нужен такой "динамический"?..


 
Andriy Tysh ©   (2004-05-05 10:28) [3]

Нет под рукой у меня хелпа. Но парень, который раньше работал с нами, тоже писал под Sybase. В его процедурах точно был динамический курсор. Нафиг он ему был нужен в тех местах, где он его использует - мы до сих пор не понимаем. Я всегда использую статический. Но это зависит от задачи. Если я выбираю к примеру названия и коды товаров, то предполагаю, что эти два поля точно за 0.0001 секунду никто не изменит. (:-)
Поэтому и не напрягаюсь.


 
Курдль ©   (2004-05-05 10:33) [4]


> Если я выбираю к примеру названия и коды товаров, то предполагаю,
> что эти два поля точно за 0.0001 секунду никто не изменит.
> (:-)
> Поэтому и не напрягаюсь.

У меня задача, в которой без вмешательства не обойтись - курсор строится по 2-м таблицам, связанным по внешнему ключу. Причем, чтобы что-то удалить из второй - надо сначала зачистить первую.



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
3-1084281979
Shkut
2004-05-11 17:26
2004.05.30
Как подавить звуковой сигнал в TDBEdit


14-1084460862
Анонимщик
2004-05-13 19:07
2004.05.30
BoundsChecker


3-1083617193
SergP
2004-05-04 00:46
2004.05.30
Модификация записей в одной таблице сразу из двух TAdoQuery.


1-1084361111
новичок_из_сыктывкара
2004-05-12 15:25
2004.05.30
строку наоборот


6-1081426907
Makhanev A.S.
2004-04-08 16:21
2004.05.30
Блокирующие Сокеты: можно ли так делать...