Курсоры
Курсоры
До сих пор сервер возвращал все результаты запроса по его завершении. Иногда бывает предпочтительнее получать ответ построчно. Чаще всего это справедливо при встраивании SQL-запросов в другие программы. Если запрос возвращает десятки тысяч строк, очень велика вероятность, что вам захочется обработать результаты построчно, а не хранить все в памяти для дальнейшего использования. Этот метод применяется в большинстве случаев, когда необходимо обращаться к SQL из Perl. Вот маленькая программа на SQL, в которой показано употребление курсоров на сервере Sybase или MS-SQL:
USE sysadm
-- объявляем переменные DECLARE (ahostname character(30) DECLARE @ip character(15)
-- объявляем курсор
DECLARE hosts_curs CURSOR FOR SELECT name,ipaddr FROM hosts
-- открываем курсор OPEN hosts_curs
-- обходим в цикле таблицу, получая по одной строке за один раз -- до тех пор, пока не получим ошибку FETCH hosts_curs INTO shostname,gip WHILE (@@fetch_status = 0) BEGIN
PRINT "----"
PRINT (Briostriame
PRINT @ip
FETCH hosts_curs INTO Shostname.^iD END -- закрываем курсор (это не обязательно если -- далее следует DEALLOCATE) CLOSE hosts._curs
-- снимаем определение (unde'ine) курсора DEALLOCATE hosts_curs
В результате получается следующее:
shimmer 192.163.1.11
bendir 192.168.1.3
sander 192.168.1.55
Sulawesi 192.168.1.12