Въведение в курсорите в SQL

Курсорите са временни работни пространства, създадени в паметта за обработка на някои SQL команди върху куп данни. Твърде сложна дефиниция? Нека да го разберем. Помислете за курсорите като за всеки цикъл в SQL. Искате да изпълнявате задача на набор от редове данни, използвате курсор. Да речем, че имате таблица със служители, която държи заплатата на всеки служител на организацията. Искате да увеличите заплатата на всеки служител с определен процент. Тук ще използвате курсор. По-долу в статията е илюстрирано „Как“.

И така, курсорите създават временно работно пространство с избрания набор от редове и указател, който сочи към текущия ред. Този набор от редове, върху които курсорът ще извърши желаната операция, се нарича активен набор от данни. Показалецът извлича редовете от резултата, определен един по един. След това можете да извършите всяка SQL операция един ред в даден момент.

Неявни курсори

Имплицитните курсори, както подсказва името, се генерират от SQL анализатора за DML заявки. DML заявките са заявки за манипулация на данни. Тези заявки манипулират или променят данните. Те не пречат на структурата или схемата на базата данни. Заявки като SELECT, INSERT, UPDATE и DELETE генерират неявен курсор. Незадължителните курсори са скрити за крайния потребител.

Изрични курсори

Изричните курсори са генерирани от потребителя курсори. Когато потребителят инструктира SQL анализатора да създаде курсор за активен набор, така създаденият курсор се нарича явен курсор. Активният набор се дефинира чрез SELECT заявка от потребителя. В тази статия ще разгледаме подробно явните курсори.

Действия на курсора - Жизненият цикъл на курсор

Жизненият цикъл на курсора обикновено включва пет етапа:

1. Деклариране: Първата стъпка е деклариране на курсор. Тази стъпка инструктира системата да генерира курсор с дадения набор от данни. Наборът от данни е конструиран с помощта на SQL оператор. На този етап се създава активният набор, но временното работно пространство на курсора все още не е отворено в паметта.

2. Отваряне: След това системата се инструктира да отвори курсора. На този етап временното работно пространство се зарежда в паметта с активния набор и се генерира указател, който сочи към първия ред в активния набор.

3. Извличане: Това е повтарящата се стъпка в целия процес. Текущият ред, посочен от показалеца, се извлича и желаната задача се изпълнява върху данните на реда. Показалецът се премества към следващия ред в курсора.

4. Затваряне: След манипулирането на данни курсорът трябва да бъде затворен.

5. Разпределете: Това е последната стъпка за изтриване на курсора и освобождаване на паметта, процесора и други системни ресурси, разпределени на курсора.

Изрични курсори - в действие!

Добре, така че сега имаме основно разбиране какво представляват курсорите и как работят. Време е да си изцапаме ръцете и сами да създадем явен курсор.

Терминологията на курсорите в SQL

Нека разберем терминологиите, използвани в този синтаксис.

Обхват на курсора

  • Обхватът на курсора може да бъде GLOBAL или LOCAL . По време на връзката е наличен глобален курсор. Локалният курсор е ограничен до обхвата само на съхранените процедури, функции или заявката, която държи курсора.
  • Това е специфичната за MS SQL Server функция. MySQL поддържа само локални курсори.

Движение на курсора

  • MS SQL Server също дава възможност да настроите движението на курсора. Това може да бъде или конвенционалният режим Forward_Only, който премества показалеца от първия ред до последния ред по ред. Или може да се превърта до първия, последния, предишния или следващия ред.
  • Курсорите в MySQL не могат да се променят.

Тип курсор

  • Курсорът може да бъде статичен, тъй като в него може да кешира активния набор до разместване и може да скача напред и назад през този кеширан активен набор. Курсорът може да бъде бърз напред само в статичен режим.
  • Той може също да бъде динамичен, за да позволи добавянето или изтриването на редове в активния набор, докато курсорът е отворен. Тези промени не се виждат от други потребители на курсора в режим на клавиатура. Курсорите в MySQL са само fast_forward.

Заключване на курсора

  • Заключенията на курсора са полезни в многопотребителска среда. Те заключват реда, така че нито един потребител да не работи едновременно върху едни и същи данни. Това гарантира целостта на данните.
  • Заключването само за четене гласи, че редът не може да бъде актуализиран.
  • Scroll-locks заключват реда, тъй като те са получени в курсора, гарантирайки, че задачата е успешна и актуализираните данни са достъпни извън курсора. Оптимистични опити за актуализиране на реда без блокиране. По този начин, ако редът е актуализиран извън курсора, задачата няма да успее.
  • MySQL поддържа само брави само за четене. Това означава, че MySQL няма да актуализира действителната таблица, а по-скоро ще копира данните за изпълнение на команди за актуализиране.

Така виждаме, че тези опции са достъпни само в MS SQL Server. Това прави синтаксиса за MySQL курсори още по-прост.

пример

Нека сега актуализираме заплатата на служителите в нашата таблица на служителите.

Ще използваме по-долу данните в тези курсори в пример SQL.

Нашият код на курсора ще бъде следният:

DECLARE @sal float
DECLARE @newsal float
DECLARE Emp_Cur CURSOR FOR SELECT Salary, Updated_Salary FROM Employees
OPEN Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
WHILE @@FETCH_STATUS = 0
BEGIN
SET @newsal = @sal*1.25
UPDATE Employees SET Updated_Salary = @newsal WHERE CURRENT OF Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
END
CLOSE Emp_Cur
DEALLOCATE Emp_Cur

И изходът след изпълнение на горната команда на курсора ще бъде:

Заключение - Курсори в SQL

Така видяхме какво представляват курсорите, как да ги използваме и къде да ги избягваме. Курсорите се оказват полезна помощ за разработчиците, но с цената на производителността. Така че, бъдете внимателни, когато избирате курсори.

Препоръчителни статии

Това е ръководство за курсори в SQL. Тук обсъждаме типовете, жизнения цикъл и терминологията на курсора в SQL с примери. Можете да разгледате и другите ни предложени статии -

  1. Видове съединения в SQL
  2. SQL Alter команда
  3. SQL изгледи
  4. Инструменти за управление на SQL
  5. Видове курсори в PL / SQL
  6. Топ 6 вида съединения в MySQL с примери