Увод у курсоре у СКЛ-у

Курсори су привремени радни простори креирани у меморији за обраду неких СКЛ наредби на хрпи података. Превише компликована дефиниција? Да разумемо. Помислите на курсоре као на сваку петљу у СКЛ-у. Желите да обавите задатак на скупу података, користите курсор. Рецимо да имате сто за запослене који држи плату сваког запосленог у организацији. Желите да повећате плату сваког запосленог за одређени проценат. Овде бисте користили курсор. 'Како' је илустровано касније у чланку.

Дакле, курсори стварају привремени радни простор са одабраним низом редова и показивачем који упућује на тренутни ред. Овај скуп редова, на којем ће курзор извршити жељену операцију, назива се активним скупом података. Показивач повлачи редове из резултата скупа један по један. Затим можете изводити било коју СКЛ операцију један ред по један.

Имплицитни курсори

Имплицитни курсори, као што име имплицира, генеришу СКЛ анализатор за ДМЛ упите. ДМЛ упити су упити за манипулацију подацима. Ови упити манипулирају или мијењају податке. Они се не мешају у структуру или шему базе података. Упити попут СЕЛЕЦТ, ИНСЕРТ, УПДАТЕ и ДЕЛЕТЕ генерирају имплицитни курсор. Неизгледни курсори скривени су за крајњег корисника.

Експлицитни курсори

Експлицитни курсори су курсори генерисани од стране корисника. Када корисник упуте СКЛ парсеру да креира курсор за активни скуп, тако креиран курсор назива се експлицитни курсор. Активни скуп је дефинисан путем СЕЛЕЦТ упита од стране корисника. У овом чланку ћемо детаљно покривати експлицитне показиваче.

Радње курсора - Животни циклус курсора

Животни циклус курсора обично укључује пет фаза:

1. Изјави: Први корак је проглашавање курсора. Овај корак упућује систем да генерише курсор са датим скупом података. Скуп података је конструисан помоћу СКЛ израза. У овој фази се креира активни скуп, али привремени радни простор курсора још није отворен у меморији.

2. Отворено: Затим је систем упућен да отвори курсор. У овој фази се привремени радни простор учитава у меморију са активним сетом и генерише се показивач који упућује на први ред у активном скупу.

3. Дохват: Ово је понављајући корак у целом процесу. Преузима се тренутни ред усмјерен показивачем и жељени задатак се обавља на подацима ретка. Показивач се премешта на следећи ред курсора.

4. Затвори: Након што је извршена манипулација подацима, показивач се мора затворити.

5. Додели: Ово је последњи корак за брисање курсора и ослобађање меморије, процесора и других системских ресурса додељених курсору.

Експлицитни курсори - на дјелу!

Ок, сада имамо основно разумевање шта су курсори и како функционишу. Време је да умажемо руке и сами креирамо експлицитни курсор.

Терминологија курсора у СКЛ-у

Разумејмо терминологије које се користе у овој синтакси.

Обим курсора

  • Опсег курсора може бити ГЛОБАЛ или ЛОЦАЛ . Глобални курсор је доступан током целе везе. Локални курсор је ограничен само на похрањене процедуре, функције или упит који држи курзор.
  • Ово је значајка МС СКЛ Сервер-а. МиСКЛ подржава само локалне курсоре.

Кретање курсора

  • МС СКЛ Сервер такође даје могућност подешавања кретања курсора. То може бити или конвенционални начин рада Напред_Онли који помера показивач од првог реда до последњег ретка по ред. Или се може помицати до првог, последњег, претходног или следећег реда.
  • Курсори у МиСКЛ-у се не могу померити.

Тип курсора

  • Курсор може бити статичан јер у њему може кеширати активни скуп до размештања и може прелазити напред и назад кроз тај кеширани активни скуп. Курсор може бити брз_ напред само у статичком режиму.
  • Такође може бити динамично да омогући додавање или брисање редова у активном скупу док је курсор отворен. Ове промене нису видљиве осталим корисницима курсора у режиму тастатуре. Курсори у МиСКЛ-у су само фаст_форвард.

Закључавање курсора

  • Закључавање курсора је корисно у окружењу за више корисника. Они закључавају ред тако да два корисника не раде истовремено на истим подацима. То осигурава интегритет података.
  • Закључавање само за читање каже да се ред не може ажурирати.
  • Сцролл-бравице закључавају ред док се преузимају у показивачу осигуравајући да задатак успе и да су ажурирани подаци доступни изван курсора. Оптимистични покушаји ажурирања реда без икаквог закључавања. Дакле, ако је ред ажуриран изван курсора, задатак неће успети.
  • МиСКЛ подржава закључавање само за читање. То значи да МиСКЛ неће ажурирати стварну таблицу, већ ће копирати податке да би извршио наредбе за ажурирање.

Стога видимо да су ове опције доступне само у МС СКЛ Серверу. То чини синтаксу за МиСКЛ курсоре још једноставнијом.

Пример

Ажурирајте плату запослених у нашој табели са запосленима.

Податке из ових курсора користићемо у СКЛ примеру.

Наш курс курсора био би следећи:

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

А излаз након извршења горње наредбе курсора био би:

Закључак - Курсори у СКЛ-у

Тако смо видели шта су курсори, како их користити и где да их избегну. Курсори се доказују као корисни алат за програмере, али по цену перформанси. Дакле, будите опрезни када се одлучите за курсоре.

Препоручени чланци

Ово је водич за курсоре у СКЛ-у. Овде ћемо са примерима разговарати о типовима, животном циклусу и терминологији курсора у СКЛ-у. Можете и да прођете кроз друге наше предложене чланке -

  1. Врсте придруживања у СКЛ-у
  2. СКЛ Алтер команда
  3. СКЛ Виевс
  4. СКЛ Алати за управљање
  5. Типови курсора у ПЛ / СКЛ
  6. Топ 6 врста придруживања у МиСКЛ-у са примерима

Категорија: