logo

СКЛ Сервер Функције

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

Следећа су правила за креирање СКЛ Сервер функција:

  • Функција мора да има име, а име не може да почиње посебним знаком као што су @, $, # или други слични знакови.
  • СЕЛЕЦТ изјаве су једине које раде са функцијама.
  • Можемо да користимо функцију било где као што су АВГ, ЦОУНТ, СУМ, МИН, ДАТЕ и друге функције са СЕЛЕЦТ упитом у СКЛ-у.
  • Кад год се функција позове, она се компајлира.
  • Функције морају да врате вредност или резултат.
  • Функције користе само улазне параметре.
  • Не можемо користити ТРИ и ЦАТЦХ изјаве у функцијама.

Врсте функција

СКЛ Сервер категорише функције у два типа:

  • Системске функције
  • Кориснички дефинисане функције

Хајде да детаљно опишемо оба типа.

Системске функције

Функције које дефинише систем познате су као системске функције. Другим речима, све уграђене функције које подржава сервер називају се системским функцијама. Уграђене функције нам штеде време док обављамо одређени задатак. Ове врсте функција обично раде са СКЛ СЕЛЕЦТ наредбом за израчунавање вредности и манипулацију подацима.

Ево листе неких системских функција које се користе у СКЛ Серверу:

  • Функције низа (ЛЕН, СУБСТРИНГ, РЕПЛАЦЕ, ЦОНЦАТ, ТРИМ)
  • Функције датума и времена (датетиме, датетиме2, смаллдатетиме)
  • Збирне функције (ЦОУНТ, МАКС, МИН, СУМ, АВГ)
  • Математичке функције (АБС, ПОВЕР, ПИ, ЕКСП, ЛОГ)
  • Функције рангирања (РАНК, ДЕНСЕ_РАНК, РОВ_НУМБЕР, НТИЛЕ)

Следећа слика приказује све уграђене функције базе података које се користе у СКЛ Серверу:

СКЛ Сервер Функције

Кориснички дефинисане функције

Функције које су креиран од стране корисника у системској бази података или кориснички дефинисаној бази података познате су као кориснички дефинисане функције. УДФ функције прихватају параметре, извршавају радње и враћају резултат. Ове функције нам помажу да поједноставимо наш развој тако што ће инкапсулирати сложену пословну логику и учинити је доступним за поновну употребу било где на основу потреба. Кориснички дефинисане функције чине код потребан за упит података много лакшим за писање. Они такође побољшавају читљивост и функционалност упита, као и омогућавају другим корисницима да реплицирају исте процедуре.

СКЛ Сервер категоризује функције које дефинише корисник углавном у два типа:

  1. Скаларне функције
  2. Функције са табеларним вредностима

Ево описа ових УДФ функција.

Скаларне функције

Скаларна функција у СКЛ Серверу увек прихвата параметре, било појединачне или вишеструке, и враћа једну вредност . Скаларне функције су корисне у поједностављењу нашег кода. Претпоставимо да имамо сложено израчунавање које се појављује у бројним упитима. У таквом случају, можемо да направимо скаларну функцију која инкапсулира формулу и користи је у сваком упиту уместо у сваком упиту.

Следеће је синтакса која илуструје креирање скаларне функције у СКЛ Серверу:

 CREATE FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END 

Горе наведени параметри синтаксе су описани у наставку:

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

Пример

Овај пример ће креирати функцију за израчунати нето продају на основу количине, цене и вредности попуста:

 CREATE FUNCTION udfNet_Sales( @quantity INT, @price DEC(10,2), @discount DEC(3,2) ) RETURNS DEC(10,2) AS BEGIN RETURN @quantity * @price * (1 - @discount); END; 

Сада можемо да користимо ову функцију да израчунамо нето продају било ког продајног налога у дефинисаној табели.

На следећој слици се приказује где можемо пронаћи скаларне функције:

СКЛ Сервер Функције

Скаларне функције можемо назвати исто као и уграђене функције у СКЛ Серверу. На пример, можемо позвати горњу функцију удфНет_Салес на следећи начин:

 SELECT dbo.udfNet_Sales(25, 500, 0.2) AS net_sales; 

Извршавање ове функције ће вратити нето продају:

СКЛ Сервер Функције

СКЛ Сервер нам такође дозвољава да модификујете скаларну функцију коришћењем АЛТЕР кључна реч. Ево синтаксе за ово:

 ALTER FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END 

Можемо користити доњу изјаву да уклонимо скаларну функцију из базе података СКЛ Сервера:

 DROP FUNCTION [schema_name.]function_name; 

Функције са табеларним вредностима

Функције са табеларним вредностима у СКЛ Серверу су кориснички дефинисану функцију који враћа податке типа табеле. Пошто је ова функција тип повратка је табела , можемо га користити на исти начин као што користимо табелу.

Функцију са табеларном вредношћу можемо категоризовати у два типа:

1. Инлине функције табеле-вредности

Ова УДФ функција враћа променљиву табеле на основу акције коју је извршила функција. За одређивање вредности променљиве табеле треба користити једну наредбу СЕЛЕЦТ.

Пример

Пример у наставку ће креирати функцију табеле-вредности и преузети податке табеле запослених:

рајесх кханна
 --It creates a table-valued function to get employees CREATE FUNCTION fudf_GetEmployee() RETURNS TABLE AS RETURN (SELECT * FROM Employee) 

У овој синтакси, тхе ТАБЕЛА ПОВРАТАКА одређује да ће функција вратити табелу. Пошто нема ПОЧНИ...КРАЈ изјава, једноставно тражи податке из табеле запослених. Такође, ако нема параметара, биће позван директно.

Функције са табеларном вредношћу можемо позвати помоћу ИЗ клаузула о СЕЛЕЦТ упит. На пример , можемо назвати горе наведено удф_ГетЕмплоиее функционише као испод:

 SELECT * FROM udf_GetEmployee(); 

Извршавање ове функције ће вратити следећи резултат:

СКЛ Сервер Функције

СКЛ Сервер нам такође омогућава да модификујемо функције са вредностима табеле користећи кључну реч АЛТЕР уместо кључне речи ЦРЕАТЕ. Остатак сценарија је исти.

Функције табеларне вредности са више исказа (МСТВФ)

Ова УДФ функција враћа променљиву табеле на основу радње коју врши функција. Може да садржи једну или више наредби за добијање резултата, а такође је и функција која враћа резултат више исказа у табеларном облику. Корисно је јер можемо да извршимо више наредби у овој функцији и добијемо агрегиране резултате у враћеној табели. Ову функцију можемо дефинисати коришћењем променљиве табеле као повратне вредности. Унутар функције извршавамо више упита и убацујемо податке у ову променљиву табеле.

Следећи пример креира име функције 'ВИШЕ ВРЕДНОСТИ' који враћа ' @Запослени' сто. Садржи три поља под називом ид, емп_наме и плата из 'Запослени' табела користећи ИНСЕРТ наредбу, а затим користи наредбу УПДАТЕ за ажурирање имена запосленог.

 CREATE FUNCTION MULTIVALUED() RETURNS @Employee TABLE (id INT, emp_name VARCHAR(50), salary INT) AS BEGIN INSERT INTO @Employee SELECT E.id, E.emp_name, E.salary FROM Employee E; UPDATE @Employee SET emp_name = 'Graeme Smith' WHERE id = 3; RETURN END 

Можемо позвати функције табеларне вредности са више исказа користећи клаузулу ФРОМ упита СЕЛЕЦТ. На пример , можемо назвати горњу функцију на следећи начин:

 SELECT * FROM MULTIVALUED(); 

Извршавање ове функције ће вратити следећи резултат:

СКЛ Сервер Функције

Када треба користити функције са табеларним вредностима?

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

Закључак

Овај чланак ће објаснити комплетан преглед функција које се користе у СКЛ Серверу. Овде смо научили углавном две врсте функција које се користе у СКЛ Серверу: системске и кориснички дефинисане функције.