Збережена процедура (англ. stored procedure, також звана proc, storp, sproc, StoPro, StoredProc, StoreProc, sp або SP) — підпрограма, доступна застосункам, які мають доступ до системи керування реляційними базами даних (СКРБД). Такі процедури зберігаються у словнику даних бази.
До типових застосувань збережених процедур належать [en] (вбудована до бази даних) та механізми контролю доступу. Крім того, збережені процедури можуть збирати та централізувати логіку, яку спочатку було реалізовано в застосунках. Для збереження часу та пам'яті, об'ємні чи складні обробки, що вимагають виконання декількох операторів SQL, може бути зібрано до збережених процедур, і усі застосунки можуть викликати ці процедури. Можна використовувати вкладені збережені процедури шляхом виклику одних процедур з інших.
Збережені процедури подібні до [en] (англ. user-defined function, UDF). Основною відмінністю є те, що користувацькі функції повертають результат, та можуть використовуватися як інші функції в запитах та операторах SQL, тоді як збережені процедури не завжди явно повертають результат, та представляють собою окремий виклик. Викликається оператором CALL
.
CALL procedure(...)
або
EXECUTE procedure(...)
Збережені процедури можуть повертати результатні набори, тобто, результати оператора SELECT
. Такі результатні набори можливо оброблювати з використанням курсорів, іншими збереженими процедурами, шляхом пов'язування визначника результатного набору, або застосунками. Збережені процедури також можуть містити оголошені змінні для обробки даних, і курсори, що дозволяють організовувати цикли по рядках таблиці. До операторів керування потоком збережених процедур зазвичай належать IF
, WHILE
, LOOP
, REPEAT
та CASE
, а також інші. Збережені процедури можуть отримувати змінні, повертати результати чи змінювати змінні та повертати їх, залежно від способу та місця оголошення змінної.
Реалізація
Точна і правильна реалізація збережених процедур різниться від однієї системи баз даних до іншої. Більшість основних постачальників баз даних у тому чи іншому вигляді їх підтримують. Залежно від системи баз даних, збережені процедури можливо реалізовувати різними мовами програмування, наприклад SQL, Java, C або . Збережені процедури, написані мовами, відмінними від SQL, можуть мати або не мати можливості виконувати власне оператори SQL.
Збільшення прийняття збережених процедур спричинило впровадження процедурних елементів до мови SQL у стандартах SQL:1999 та SQL:2003 у частині SQL/PSM. Це зробило SQL імперативною мовою програмування. Більшість систем баз даних надають власницькі чи специфічні розширення постачальника понад SQL/PSM. Стандартна специфікація [en] існує як [en].
Система баз даних | Мова реалізації |
---|---|
[en] | Java |
DB2 | [en] (близька до стандарту ) або Java |
Firebird | PSQL (Fyracle також підтримує частини Oracle PL/SQL) |
Informix | SPL або Java |
Microsoft SQL Server | Transact-SQL та різні мови .NET Framework |
MySQL | власні збережені процедури, що близько дотримуються стандарту |
[en] | SQL або Java |
Oracle | (PL/SQL) або Java |
PostgreSQL | [ru], може також використовувати власну функційну мову, як-от PL/Perl або PL/PHP |
[ru] | SQL або R |
[en] | Transact-SQL |
Порівняння з динамічною SQL
- Накладні витрати
- Оскільки оператори збережених процедур зберігаються безпосередньо у базі даних, вони можуть позбавляти всіх або частини накладних витрат на компіляцію, що зазвичай необхідно в ситуаціях, коли програмні застосунки надсилають рядкові (динамічні) запити SQL до бази даних. (Проте, більшість систем баз даних реалізують кеші операторів та інші методи уникання повторної компіляції динамічних операторів SQL.) Також, уникаючи деякого попередньо скомпільованого SQL, оператори ускладнюють побудову оптимального плану виконання через те, що не всі аргументи оператора SQL надаються під час компіляції. Залежно від конфігурації та налаштувань баз даних, можна спостерігати змішані результати продуктивності збережених процедур у порівнянні зі звичайними запитами та користувацькими функціями.
- Уникання мережевого трафіку
- Основною перевагою збережених процедур є те, що вони можуть запускатися безпосередньо в рушії бази даних. У виробничій системі це зазвичай означає, що процедури запускаються цілком на спеціалізованому сервері баз даних, який має прямий доступ до даних. Перевагою є те, що витрат на мережеві комунікації можна уникнути повністю. Це стає важливішим для складніших послідовностей операторів SQL.
- Інкапсулювання бізнес-логіки
- Збережені процедури дозволяють програмістам вбудовувати бізнес-логіку як ППІ до бази даних, що може спрощувати керування даними та зменшувати необхідність кодування логіки деінде у клієнтських програмах. Це може призводити до зниження ймовірності пошкодження даних збійними клієнтськими програмами. За допомогою збережених процедур система баз даних може забезпечувати цілісність і узгодженість даних.
- Делегування прав доступу
- У багатьох системах збереженим процедурам можуть надаватися такі права доступу до бази даних, яких користувачі, що виконують ці процедури, безпосередньо не мають.
- Деякий захист від атак SQL-ін'єкціями
- Збережені процедури можуть використовуватися для захисту від атак ін'єкціями. Параметри збережених процедур розглядаються як дані, навіть якщо нападник вставляє команди SQL. Також деякі СКБД перевіряють типи параметрів. Однак, збережена процедура, що генерує динамічний SQL з використанням входу, все одно вразлива до SQL-ін'єкцій за відсутності належних запобіжних заходів.
Інші застосування
В деяких системах збережені процедури можуть використовуватися для контролю за управлінням транзакціями; в інших збережені процедури запускаються всередині транзакції так, що останні ефективно їх обгортають. Збережені процедури також можуть викликатися з тригера бази даних або обробника умови. Наприклад, збережена процедура може спрацьовувати при вставці до заданої таблиці чи оновленні її поля, і виконуватиметься код всередині збереженої процедури. Також, написання збережених процедур як обробників умов дозволяє адміністраторам баз даних відстежувати помилки в системі з більшою деталізацією шляхом їх використання для відловлювання помилок і запису деякої інформації для аудиту до бази даних або зовнішнього ресурсу, наприклад, файлу.
Порівняння з функціями
- Функція є підпрограмою, написаною для виконання деяких обчислень.
- Скалярна функція повертає лише одне значення (або NULL), тоді як таблична функція повертає (реляційну) таблицю, що складається з 0 чи більше рядків, які, у свою чергу, з 1 чи більше стовпчиків.
- Функції повинні повертати значення (використовуючи ключове слово
RETURN
), але від збережених процедур це не вимагається. - Збережені процедури можуть використовувати ключове слово
RETURN
, але без передавання жодного значення. - Функції можуть використовуватися в операторах
SELECT
, за умови, що вони не маніпулюють даними. Процедури ж до операторівSELECT
включено бути не може. - Збережені процедури можуть повертати кілька значень, використовуючи параметр
OUT
, або не повертати їх взагалі. - Збережена процедура заощаджує час компілювання запитів.
- Збережена процедура є об'єктом бази даних.
- Збережена процедура є матеріальним об'єктом.
Порівняння з підготовленими операторами
[en] приймають на вхід звичайний оператор або запит, і параметризують його, так, що пізніше можуть використовуватися різні значення літералів. Як і збережені процедури, вони зберігаються на сервері задля ефективності, та надають деякий захист від атак SQL-ін'єкціями. Простіші та більш декларативні, підготовлені оператори зазвичай не пишуться з використанням процедурної логіки, і не можуть оперувати змінними. Через простий інтерфейс і реалізацію на боці клієнта підготовлені оператори є ширше переносними між СКБД.
Недоліки
- Мови збережених процедур часто специфічні для постачальника. Зміна постачальників баз даних зазвичай вимагає переписування наявних збережених процедур.
- Мови збережених процедур різних постачальників мають різні рівні витонченості.
- Наприклад, pgpsql у Postgres має більше мовних можливостей (особливо з розширеннями), ніж Microsoft T-SQL.[]
- Засоби підтримки написання та зневаджування збережених процедур часто не такі добрі, як для інших мов програмування, але це різниться між постачальниками та мовами.
- Наприклад, і PL/SQL, і T-SQL мають виділені ІСР та зневаджувачі. PL/PgSQL можна зневаджувати з різних ІСР.
- Зміни збережених процедур важче відстежувати в межах систем керування версіями, ніж зміни іншого коду. Зміни повинні відтворюватися як сценарії для включення до історії проекту, а різниці у процедурах може бути важче правильно зливати та відстежувати.
Примітки
- (англійською) . IBM. Архів оригіналу за 7 травня 2020. Процитовано 24 березня 2022.
Посилання
- . MySQL. Архів оригіналу за 26 лютого 2017. Процитовано 4 лютого 2017.
- . PostgreSQL. Архів оригіналу за 5 травня 2016. Процитовано 4 лютого 2017.
- . Архів оригіналу за 5 лютого 2017. Процитовано 4 лютого 2017.
- . Стенфордський університет. Архів оригіналу за 3 грудня 2016. Процитовано 4 лютого 2017.
- . Oracle Corporation. Архів оригіналу за 28 жовтня 2011. Процитовано 4 лютого 2017.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Zberezhena procedura angl stored procedure takozh zvana proc storp sproc StoPro StoredProc StoreProc sp abo SP pidprograma dostupna zastosunkam yaki mayut dostup do sistemi keruvannya relyacijnimi bazami danih SKRBD Taki proceduri zberigayutsya u slovniku danih bazi Do tipovih zastosuvan zberezhenih procedur nalezhat en vbudovana do bazi danih ta mehanizmi kontrolyu dostupu Krim togo zberezheni proceduri mozhut zbirati ta centralizuvati logiku yaku spochatku bulo realizovano v zastosunkah Dlya zberezhennya chasu ta pam yati ob yemni chi skladni obrobki sho vimagayut vikonannya dekilkoh operatoriv SQL mozhe buti zibrano do zberezhenih procedur i usi zastosunki mozhut viklikati ci proceduri Mozhna vikoristovuvati vkladeni zberezheni proceduri shlyahom vikliku odnih procedur z inshih Zberezheni proceduri podibni do en angl user defined function UDF Osnovnoyu vidminnistyu ye te sho koristuvacki funkciyi povertayut rezultat ta mozhut vikoristovuvatisya yak inshi funkciyi v zapitah ta operatorah SQL todi yak zberezheni proceduri ne zavzhdi yavno povertayut rezultat ta predstavlyayut soboyu okremij viklik Viklikayetsya operatorom CALL CALL procedure abo EXECUTE procedure Zberezheni proceduri mozhut povertati rezultatni nabori tobto rezultati operatora a href wiki Select SQL title Select SQL SELECT a Taki rezultatni nabori mozhlivo obroblyuvati z vikoristannyam kursoriv inshimi zberezhenimi procedurami shlyahom pov yazuvannya viznachnika rezultatnogo naboru abo zastosunkami Zberezheni proceduri takozh mozhut mistiti ogolosheni zminni dlya obrobki danih i kursori sho dozvolyayut organizovuvati cikli po ryadkah tablici Do operatoriv keruvannya potokom zberezhenih procedur zazvichaj nalezhat IF WHILE LOOP REPEAT ta CASE a takozh inshi Zberezheni proceduri mozhut otrimuvati zminni povertati rezultati chi zminyuvati zminni ta povertati yih zalezhno vid sposobu ta miscya ogoloshennya zminnoyi RealizaciyaTochna i pravilna realizaciya zberezhenih procedur riznitsya vid odniyeyi sistemi baz danih do inshoyi Bilshist osnovnih postachalnikiv baz danih u tomu chi inshomu viglyadi yih pidtrimuyut Zalezhno vid sistemi baz danih zberezheni proceduri mozhlivo realizovuvati riznimi movami programuvannya napriklad SQL Java C abo C Zberezheni proceduri napisani movami vidminnimi vid SQL mozhut mati abo ne mati mozhlivosti vikonuvati vlasne operatori SQL Zbilshennya prijnyattya zberezhenih procedur sprichinilo vprovadzhennya procedurnih elementiv do movi SQL u standartah SQL 1999 ta SQL 2003 u chastini SQL PSM Ce zrobilo SQL imperativnoyu movoyu programuvannya Bilshist sistem baz danih nadayut vlasnicki chi specifichni rozshirennya postachalnika ponad SQL PSM Standartna specifikaciya en isnuye yak en Sistema baz danih Mova realizaciyi en Java DB2 en blizka do standartu abo Java Firebird PSQL Fyracle takozh pidtrimuye chastini Oracle PL SQL Informix SPL abo Java Microsoft SQL Server Transact SQL ta rizni movi NET Framework MySQL vlasni zberezheni proceduri sho blizko dotrimuyutsya standartu en SQL abo Java Oracle PL SQL abo Java PostgreSQL ru mozhe takozh vikoristovuvati vlasnu funkcijnu movu yak ot PL Perl abo PL PHP ru SQL abo R en Transact SQLPorivnyannya z dinamichnoyu SQLNakladni vitrati Oskilki operatori zberezhenih procedur zberigayutsya bezposeredno u bazi danih voni mozhut pozbavlyati vsih abo chastini nakladnih vitrat na kompilyaciyu sho zazvichaj neobhidno v situaciyah koli programni zastosunki nadsilayut ryadkovi dinamichni zapiti SQL do bazi danih Prote bilshist sistem baz danih realizuyut keshi operatoriv ta inshi metodi unikannya povtornoyi kompilyaciyi dinamichnih operatoriv SQL Takozh unikayuchi deyakogo poperedno skompilovanogo SQL operatori uskladnyuyut pobudovu optimalnogo planu vikonannya cherez te sho ne vsi argumenti operatora SQL nadayutsya pid chas kompilyaciyi Zalezhno vid konfiguraciyi ta nalashtuvan baz danih mozhna sposterigati zmishani rezultati produktivnosti zberezhenih procedur u porivnyanni zi zvichajnimi zapitami ta koristuvackimi funkciyami Unikannya merezhevogo trafiku Osnovnoyu perevagoyu zberezhenih procedur ye te sho voni mozhut zapuskatisya bezposeredno v rushiyi bazi danih U virobnichij sistemi ce zazvichaj oznachaye sho proceduri zapuskayutsya cilkom na specializovanomu serveri baz danih yakij maye pryamij dostup do danih Perevagoyu ye te sho vitrat na merezhevi komunikaciyi mozhna uniknuti povnistyu Ce staye vazhlivishim dlya skladnishih poslidovnostej operatoriv SQL Inkapsulyuvannya biznes logiki Zberezheni proceduri dozvolyayut programistam vbudovuvati biznes logiku yak PPI do bazi danih sho mozhe sproshuvati keruvannya danimi ta zmenshuvati neobhidnist koduvannya logiki deinde u kliyentskih programah Ce mozhe prizvoditi do znizhennya jmovirnosti poshkodzhennya danih zbijnimi kliyentskimi programami Za dopomogoyu zberezhenih procedur sistema baz danih mozhe zabezpechuvati cilisnist i uzgodzhenist danih Deleguvannya prav dostupu U bagatoh sistemah zberezhenim proceduram mozhut nadavatisya taki prava dostupu do bazi danih yakih koristuvachi sho vikonuyut ci proceduri bezposeredno ne mayut Deyakij zahist vid atak SQL in yekciyami Zberezheni proceduri mozhut vikoristovuvatisya dlya zahistu vid atak in yekciyami Parametri zberezhenih procedur rozglyadayutsya yak dani navit yaksho napadnik vstavlyaye komandi SQL Takozh deyaki SKBD pereviryayut tipi parametriv Odnak zberezhena procedura sho generuye dinamichnij SQL z vikoristannyam vhodu vse odno vrazliva do SQL in yekcij za vidsutnosti nalezhnih zapobizhnih zahodiv Inshi zastosuvannyaV deyakih sistemah zberezheni proceduri mozhut vikoristovuvatisya dlya kontrolyu za upravlinnyam tranzakciyami v inshih zberezheni proceduri zapuskayutsya vseredini tranzakciyi tak sho ostanni efektivno yih obgortayut Zberezheni proceduri takozh mozhut viklikatisya z trigera bazi danih abo obrobnika umovi Napriklad zberezhena procedura mozhe spracovuvati pri vstavci do zadanoyi tablici chi onovlenni yiyi polya i vikonuvatimetsya kod vseredini zberezhenoyi proceduri Takozh napisannya zberezhenih procedur yak obrobnikiv umov dozvolyaye administratoram baz danih vidstezhuvati pomilki v sistemi z bilshoyu detalizaciyeyu shlyahom yih vikoristannya dlya vidlovlyuvannya pomilok i zapisu deyakoyi informaciyi dlya auditu do bazi danih abo zovnishnogo resursu napriklad fajlu Porivnyannya z funkciyamiFunkciya ye pidprogramoyu napisanoyu dlya vikonannya deyakih obchislen Skalyarna funkciya povertaye lishe odne znachennya abo NULL todi yak tablichna funkciya povertaye relyacijnu tablicyu sho skladayetsya z 0 chi bilshe ryadkiv yaki u svoyu chergu z 1 chi bilshe stovpchikiv Funkciyi povinni povertati znachennya vikoristovuyuchi klyuchove slovo RETURN ale vid zberezhenih procedur ce ne vimagayetsya Zberezheni proceduri mozhut vikoristovuvati klyuchove slovo RETURN ale bez peredavannya zhodnogo znachennya Funkciyi mozhut vikoristovuvatisya v operatorah SELECT za umovi sho voni ne manipulyuyut danimi Proceduri zh do operatoriv a href wiki Select SQL title Select SQL SELECT a vklyucheno buti ne mozhe Zberezheni proceduri mozhut povertati kilka znachen vikoristovuyuchi parametr OUT abo ne povertati yih vzagali Zberezhena procedura zaoshadzhuye chas kompilyuvannya zapitiv Zberezhena procedura ye ob yektom bazi danih Zberezhena procedura ye materialnim ob yektom Porivnyannya z pidgotovlenimi operatorami en prijmayut na vhid zvichajnij operator abo zapit i parametrizuyut jogo tak sho piznishe mozhut vikoristovuvatisya rizni znachennya literaliv Yak i zberezheni proceduri voni zberigayutsya na serveri zadlya efektivnosti ta nadayut deyakij zahist vid atak SQL in yekciyami Prostishi ta bilsh deklarativni pidgotovleni operatori zazvichaj ne pishutsya z vikoristannyam procedurnoyi logiki i ne mozhut operuvati zminnimi Cherez prostij interfejs i realizaciyu na boci kliyenta pidgotovleni operatori ye shirshe perenosnimi mizh SKBD NedolikiMovi zberezhenih procedur chasto specifichni dlya postachalnika Zmina postachalnikiv baz danih zazvichaj vimagaye perepisuvannya nayavnih zberezhenih procedur Movi zberezhenih procedur riznih postachalnikiv mayut rizni rivni vitonchenosti Napriklad pgpsql u Postgres maye bilshe movnih mozhlivostej osoblivo z rozshirennyami nizh Microsoft T SQL dzherelo Zasobi pidtrimki napisannya ta znevadzhuvannya zberezhenih procedur chasto ne taki dobri yak dlya inshih mov programuvannya ale ce riznitsya mizh postachalnikami ta movami Napriklad i PL SQL i T SQL mayut vidileni ISR ta znevadzhuvachi PL PgSQL mozhna znevadzhuvati z riznih ISR Zmini zberezhenih procedur vazhche vidstezhuvati v mezhah sistem keruvannya versiyami nizh zmini inshogo kodu Zmini povinni vidtvoryuvatisya yak scenariyi dlya vklyuchennya do istoriyi proektu a riznici u procedurah mozhe buti vazhche pravilno zlivati ta vidstezhuvati Primitki anglijskoyu IBM Arhiv originalu za 7 travnya 2020 Procitovano 24 bereznya 2022 Posilannya MySQL Arhiv originalu za 26 lyutogo 2017 Procitovano 4 lyutogo 2017 PostgreSQL Arhiv originalu za 5 travnya 2016 Procitovano 4 lyutogo 2017 Arhiv originalu za 5 lyutogo 2017 Procitovano 4 lyutogo 2017 Stenfordskij universitet Arhiv originalu za 3 grudnya 2016 Procitovano 4 lyutogo 2017 Oracle Corporation Arhiv originalu za 28 zhovtnya 2011 Procitovano 4 lyutogo 2017