powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Работа с курсорами
2 сообщений из 2, страница 1 из 1
Работа с курсорами
    #32019259
slavex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите люди знающие,
не хватает вот на все времени...
Работаю с юникса -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

Кожей чувствую - такой подход несколько в прошлом, но нет возможности больше "ковыряться"...

Работая с курсорами в первый раз, четко понимаю только одно - что на ура здесь если и проходит то видимо редко и не у всех. Ни сном не духом еще не упал и не рассчитывая надеюсь на посильную вашу помощь!

Заранее благодарен,
Вячеслав
...
Рейтинг: 0 / 0
Работа с курсорами
    #32019352
ponyrev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав!
Закрытие курсора по Коммиту - помогает, хотя смахивает на аварию.
Не хотелось бы так оставлять, а сам делаю... А Вы не пробовали поиграть в локальные крусоры? У меня открывался глобальный, хотя по всему, что было сказано, должен был быть локальный. Ну, я его принудительно сделал локальным. Помогло. Правда я потом отказался от этой концепции, и точно не помню, чем дело кончилось. А! Cursor variable нельзя обявить локальным, вот что было... Отсюда была попытка закрыть по КОММИТУ (помогало). Но это все разрушило мою концепцию, и я дальнейшие упражнения забросил.

Свою проблему пока что так и не решил. Подозреваю, что она схожа с Вашей -
надо выбирать переменное число строк из таблицы, вываливать на экран, модифицировать, и updatе-ить строки.
Выбираю в программу, и не нахожу это извращением: другого выхода нет, так как программу пишу для UPDATE клеток таблиц (ну, полей отдельных записей файла, если в привыной терминологии изьясняться). Промежуточных таблиц делать не хочется - программа должна быть мультитерминальной. Отсюда следует, что курсор должен быть описан в программе. А он не описывается! Не могу найти примера. В книжках написано, что курсор - это скаляр, и с ним не все так просто. Знаю, что не просто.
Вам не попадалось таких примеров?

ponyrev@rambler.ru
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Работа с курсорами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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