Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Работа с курсорами
|
|||
|---|---|---|---|
|
#18+
Подскажите люди знающие, не хватает вот на все времени... Работаю с юникса -freetds- с MSSQL. Использую PHP для админовской части сайта. При работе с курсорами все казалось бы в норме, профайлером отслежено и пофиксино, НО скажем, при обрыве загрузки страницы с результатами, да иногда и без обрывов, по повторному обращению получаю: Warning: Sybase error: A cursor with the name 'cur' already exists. (cur - имя задеклареного курсора) * честно пытался решить проблемму, путем отслеживания состояния моего курсора такими процедурами как master.dbo.sp_describe_cursor и т.д., но и тут наткнулся опять на ошибку, кот.генерит субд, если нет такого курсора Средствами пхп решать ... совсем не хотелось бы (это больше на изв..ощрение смахивает) * CURSOR CLOSE ON COMMIT похоже мне не подходит, я ж через абсолют действую: 'cur' is not open в общем * Вгонять все в одну процедуру, просчитал, не рационально вроде, да и опять таки результатом будет n отдельных select. На С конечно это ваще не проблемма, но пхп я вижу не замучивает такой резальт Поскольку работаю с 3 процед. и они совсем не большие приведу их текст: Открыли CREATE PROCEDURE sp_cursor_open( @query varchar(1000) ) as begin EXEC( 'DECLARE cur CURSOR SCROLL FOR ' + @query ) OPEN cur SELECT @@CURSOR_ROWS end GO Используем CREATE PROCEDURE sp_cursor_use( @row integer ) as begin declare @id integer if @@FETCH_STATUS = 0 FETCH ABSOLUTE @row FROM cur into @id end GO Закрыли и так хотелось бы чтоб забыли CREATE PROCEDURE sp_cursor_close as begin close cur deallocate cur end GO Кожей чувствую - такой подход несколько в прошлом, но нет возможности больше "ковыряться"... Работая с курсорами в первый раз, четко понимаю только одно - что на ура здесь если и проходит то видимо редко и не у всех. Ни сном не духом еще не упал и не рассчитывая надеюсь на посильную вашу помощь! Заранее благодарен, Вячеслав ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2001, 22:57 |
|
||
|
Работа с курсорами
|
|||
|---|---|---|---|
|
#18+
Вячеслав! Закрытие курсора по Коммиту - помогает, хотя смахивает на аварию. Не хотелось бы так оставлять, а сам делаю... А Вы не пробовали поиграть в локальные крусоры? У меня открывался глобальный, хотя по всему, что было сказано, должен был быть локальный. Ну, я его принудительно сделал локальным. Помогло. Правда я потом отказался от этой концепции, и точно не помню, чем дело кончилось. А! Cursor variable нельзя обявить локальным, вот что было... Отсюда была попытка закрыть по КОММИТУ (помогало). Но это все разрушило мою концепцию, и я дальнейшие упражнения забросил. Свою проблему пока что так и не решил. Подозреваю, что она схожа с Вашей - надо выбирать переменное число строк из таблицы, вываливать на экран, модифицировать, и updatе-ить строки. Выбираю в программу, и не нахожу это извращением: другого выхода нет, так как программу пишу для UPDATE клеток таблиц (ну, полей отдельных записей файла, если в привыной терминологии изьясняться). Промежуточных таблиц делать не хочется - программа должна быть мультитерминальной. Отсюда следует, что курсор должен быть описан в программе. А он не описывается! Не могу найти примера. В книжках написано, что курсор - это скаляр, и с ним не все так просто. Знаю, что не просто. Вам не попадалось таких примеров? ponyrev@rambler.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2001, 15:49 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1824554]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
21ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 337ms |

| 0 / 0 |
