FAST_FORWARD- курсор быстрого доступа, непрокручиваемый, только чтение
READ_ONLY- курсор не может вносить изменений в исходные данные, а
пользователи – могут.
SCROLL_LOCKS- обновления могут быть выполнены только курсором, а другие
Операторы UPDATE выполняться не будут.
OPTIMISTIC- позволяет осуществлять обновление строк в курсоре и вне его.
Пример:
Курсорные переменные
DECLARE s1 CURSOR
LOCAL
FAST_FORWARD
FOR SELECT f FROM bd
DECLARE @ a1 CURSOR
SET a1=s1
При объявлении переменной типа CURSOR выражение DECLARE s1 CURSOR….
Не создает курсор
Открытие, закрытие и освобождение курсора
OPEN [GLOBAL] курсор_или _переменная ……………..создает набор записей
CLOSE [GLOBAL] курсор_или _переменная…………….курсор закрывается
DEALLOCATE [GLOBAL] курсор_или _переменная…..удаляет идентификатор или
Курсорную переменную, но
Не обязательно сам курсор
Манипулирование строками с помощью курсора
FETCH курсор_или_переменная ……..извлекает указанную строку из строк курсора
FETCH курсор_или_переменная………список переменных должен содержать пере-
INTO список_переменных менную для каждого столбца, присутствующего
В SELECT.
Выбор строки с записью в переменную
DECLARE a1 CURSOR
LOCAL
FOR SELECT tn, f FROM bd
DECLARE @s1 INT, @s2 CHAR(20)
OPEN a1
FETCH a1 INTO @s1, @s2
PRINT str(@s1,8,2)+@s2
CLOSE a1
DEALLOCATE a1
Выбор строки по абсолютной позиции
DECLARE a1 CURSOR
LOCAL
KEYSET
FOR SELECT tn, f FROM bd
DECLARE @s1 INT, @s2 CHAR(20)
OPEN a1
FETCH FIRST FROM a1 INTO @s1, @s2
PRINT str(@s1,8,2)+@s2
FETCH ABSOLUTE 5 FROM a1 INTO @s1, @s2
PRINT str(@s1,8,2)+@s2
CLOSE a1
DEALLOCATE a1
Выбор строки по их относительной позиции
DECLARE a1 CURSOR
LOCAL
KEYSET
FOR SELECT tn, f FROM bd
DECLARE @s1 INT, @s2 CHAR(20)
OPEN a1
FETCH ABSOLUTE 5 FROM a1 INTO @s1, @s2
PRINT str(@s1,8)+ ' '+@s2
FETCH RELATIVE 3 FROM a1 INTO @s1, @s2
PRINT str(@s1,8)+ ' '+@s2
FETCH RELATIVE -3 FROM a1 INTO @s1, @s2
PRINT str(@s1,8)+ ' '+@s2
CLOSE a1
DEALLOCATE a1
FETCH NEXT для быстродействующего курсора
DECLARE a1 CURSOR
LOCAL
FAST_FORWARD
FOR SELECT tn, f FROM bd
DECLARE @s1 INT, @s2 CHAR(20)
DECLARE @count int
OPEN a1
SET @count=1
WHILE @count<=6
BEGIN
FETCH a1 INTO @s1, @s2
PRINT str(@s1,8,2)+@s2
SET @count=@count+1
END
--FETCH RELATIVE 3 FROM a1 INTO @s1, @s2
--PRINT str(@s1,8)+ ' '+@s2
FETCH NEXT FROM a1 INTO @s1, @s2
PRINT str(@s1,8,2)+@s2
--FETCH ABSOLUTE 5 FROM a1 INTO @s1, @s2
--PRINT str(@s1,8,2)+@s2
CLOSE a1
DEALLOCATE a1
Модификация и удаление строк через курсоры
DECLARE A1 CURSOR
LOCAL
DYNAMIC
FOR SELECT TN,SN FROM i1
FOR UPDATE
OPEN A1
-- читаем первую строку
FETCH FIRST FROM A1
-- изменить,удалить строку
UPDATE I1 SET tn=55,SN=4444 WHERE CURRENT OF A1
--DELETE I1 WHERE CURRENT OF A1
--читаем
Select tn,SN FROM I1
CLOSE A1
DEALLOCATE A1@@CURCOR_ROWS ……….возвращает кол-во строк последнего курсора, если:
-m –курсор содержит m строк, полностью не заполнен
-1 – курсор является динамическим
Содержит 0 строк или не открыт
n – кол-во строк в курсоре n
Хранимые процедуры (ХП)
Это единственное средство выполнения операторов Transact-Sql. По сравнению со сценариями ХП обладают рядом преимуществ:
-ХП являются объектами БД и размещается с файлом БД, перемещается вместе с ним;
-ХП позволяют передавать данные процедуре и принимать от процедуры данные и
процедурный итоговый код;
-ХП представляются в оптимизированной форме, что ускоряет их выполнение.
Различают системные и пользовательские процедуры.
Системные процедуры хранятся в главной БД иначинаются с sp_
Примеры:
sp_addligin – добавляет учетные записи
sp_rename – переименовывает объекты БД
sp_renamedb - переименовывает БД
ХП начинаются с dt _ и используются для управления и
преобразования данных
ХП с входными параметрами
EXEC имя_процедуры параметр [, параметр]
Примеры: EXEC sp_helpdb 'aromatherapy'
EXEC sp_dboption 'aromatherapy','read only'
ХП с именнованными параметрами
EXEC имя_процедуры @имя_параметра=значение [,@имя_параметра=значение]
Пример: EXEC sp_dboption @optname=’read only’, @dbname=’aromatherapy’