Кіріспе

Реляциялық деректер қорын басқару жүйелеріне қол жеткізетін қосымшаларға қолжетімді субпрограмма – сақталған процедура (prc, proc, storp, sproc, StoPro, StoredProc, StoreProc, sp немесе SP деп те аталады) – реляциялық деректер қорын басқару жүйесіне (RDBMS) қол жеткізетін қосымшаларға қолжетімді субпрограмма. Мұндай процедуралар деректер қорының деректер сөздігінде сақталады. Сақталған процедураларды пайдалануға деректерді тексеру (деректер қорына енгізілген) немесе қол жеткізуді бақылау механизмдері жатады. Бұдан әрі, сақталған процедуралар бастапқыда қосымшаларда іске асырылған логиканы біріктіріп, орталықтандыра алады. Уақытты және жадты үнемдеу үшін бірнеше SQL операторларын орындауды талап ететін кеңейтілген немесе күрделі өңдеу сақталған процедураларда сақталуы мүмкін, ал барлық қосымшалар осы процедураларды шақырады. Бір сақталған процедураны екіншісінің ішінде орындау арқылы ішкі сақталған процедураларды пайдалануға болады. Сақталған процедуралар нәтижелер жиынтығын, яғни SELECT операторының нәтижелерін қайтара алады. Мұндай нәтижелер жиынтығын курсорлар, басқа сақталған процедуралар, нәтижелер жиынтығының локаторы немесе қосымшалар арқылы өңдеуге болады. Сақталған процедураларда деректерді өңдеу үшін жарияланған айнымалылар мен кестедегі бірнеше қатарды аралауға мүмкіндік беретін курсорлар болуы мүмкін. Сақталған процедуралардың басқару операторлары әдетте IF, WHILE, LOOP, REPEAT және CASE операторларын және тағы басқаларын қамтиды. Сақталған процедуралар айнымалыларды қабылдап, нәтижелерді қайтара алады немесе айнымалыларды өзгертіп, қайтарады, бұл айнымалының қалай және қайда жарияланғанына байланысты.

Статикалық SQL-пен салыстыру

Жасалған процедуралардың мәлімдемелері тікелей деректер қорында сақталғандықтан, олар бағдарламалық жасақтамалар деректер қорына тікелей (динамикалық) SQL сұрауларын жіберу кезінде қалыпты жағдайда қажет болатын компиляцияның барлық немесе бір бөлігін жоюы мүмкін. (Дегенмен, көптеген деректер қоры жүйелері динамикалық SQL мәлімдемелерін қайта-қайта компиляциялауды болдырмау үшін мәлімдемелер кэшін және басқа да әдістерді қолданады.) Сондай-ақ, олар алдын ала компиляцияланған SQL-дің бір бөлігін болдырмаса да, SQL мәлімдемесінің барлық аргументтері компиляция уақытында берілмейтіндіктен, оңтайлы орындау жоспарын құрудың күрделілігін арттырады. Деректер қорының нақты іске асырылуы мен конфигурациясына байланысты, сақталған процедуралар жалпы сұраулармен немесе пайдаланушы анықтаған функциялармен салыстырғанда әртүрлі нәтижелерді көрсетуі мүмкін. Желілік трафикті азайту Сақталған процедуралардың маңызды артықшылығы – олар деректер қорының өзінде тікелей орындалуы мүмкін. Өндірістік жүйеде бұл әдетте процедуралар тікелей деректерге қол жеткізе алатын арнайы деректер қоры серверінде толыққанды орындалады дегенді білдіреді. Бұл желілік шығындарды үнемдеуге мүмкіндік береді, әсіресе SQL мәлімдемелерінің тізбегі қатысқанда. Бизнес логикасын қаптау Сақталған процедуралар бағдарламашыларға бизнес логикасын деректер қорына API ретінде ендіруге мүмкіндік береді, бұл деректерді басқаруды жеңілдетеді және клиенттік бағдарламалардың басқа бөліктерінде логиканы кодтау қажеттілігін азайтады. Бұл қате клиенттік бағдарламалардың деректерді бұзу ықтималдығын азайтуы мүмкін. Деректер қоры жүйесі сақталған процедуралардың көмегімен деректердің тұтастығы мен дұрыстығын қамтамасыз ете алады. Қол жеткізу құқықтарын жүктеу Көптеген жүйелерде сақталған процедураларға тікелей қол жеткізе алмайтын пайдаланушыларға деректер қорына қол жеткізу құқығы берілуі мүмкін. SQL инъекциялық шабуылдардан қорғау Сақталған процедураларды инъекциялық шабуылдардан қорғану үшін пайдалануға болады. Сақталған процедура параметрлері шабуылшы SQL командаларын енгізсе де дерек ретінде қарастырылады. Сонымен қатар, кейбір ДБС параметрдің типін тексереді. Дегенмен, кірістік деректерді пайдаланып динамикалық SQL жасайтын сақталған процедура, тиісті сақтық шаралары қолданылмаса, SQL инъекцияларына осал болып қалады.

Басқа қолданыстар

Кейбір жүйелерде сақталған процедуралар транзакцияларды басқару үшін қолданылуы мүмкін; ал басқаларында сақталған процедуралар транзакция ішінде орындалады, нәтижесінде транзакциялар олар үшін көрінбейді. Сақталған процедураларды дерекқорының триггерінен немесе шартты өңдегіштен шақыруға болады. Мысалы, сақталған процедура нақты кестеге жазба қосылғанда немесе кестедегі нақты өріс жаңартылғанда іске қосылуы мүмкін, содан кейін сақталған процедураның ішіндегі код орындалады. Сақталған процедураларды шартты өңдегіштер ретінде жазу дерекқор әкімшілеріне жүйедегі қателерді егжей-тегжейлі қадағалауға мүмкіндік береді, себебі сақталған процедуралар арқылы қателерді ұстап алып, дерекқорға немесе файл сияқты сыртқы ресурсқа аудит ақпаратын жазуға болады.

Функциялармен салыстыру

Функция – белгілі бір есептеулерді орындау үшін жазылған кіші бағдарлама. Скалярлық функция тек бір мәнді (немесе NULL) қайтарады, ал кестелік функция нөл немесе одан көп қатарлардан тұратын (қатыстық) кесте қайтарады, әр қатарда бір немесе бірнеше баған болады. Функциялар мән қайтаруы керек (RETURN түйін сөзін пайдаланып), бірақ сақталған процедуралар үшін бұл міндетті емес. Сақталған процедуралар RETURN түйін сөзін пайдалана алады, бірақ мән жіберілмейді. Функциялар деректерді өңдемесе, SELECT сұраныстарында қолданылуы мүмкін. Дегенмен, процедураларды SELECT мәлімдемелеріне қосуға болмайды. Сақталған процедура OUT параметрін пайдаланып бірнеше мән қайтара алады немесе мән қайтармайды. Сақталған процедура сұраныстың құрастырылу уақытын үнемдейді. Сақталған процедура – деректер базасының нысаны. Сақталған процедура материалдық нысан болып табылады.

Дайындалған есептермен салыстыру

Дайын нұсқамалар қарапайым нұсқаманы немесе сұранысты алып, оны параметрлендіреді, соның арқасында кейінірек әртүрлі нақты мәндерді пайдалануға болады. Сақталған процедуралар сияқты, олар тиімділік үшін серверде сақталады және SQL инъекциясы шабуылдарынан қорғауды қамтамасыз етеді. Олар қарапайым және декларативті болғанымен, дайын нұсқамалар әдетте процедуралық логиканы қолдану үшін жазылмайды және айнымалылармен жұмыс істей алмайды. Олардың қарапайым интерфейсі мен клиенттік жақтағы іске асырылуының арқасында, дайын нұсқамалар түрлі ДБСЖ (Деректер базасын басқару жүйелері) арасында кеңінен қайта қолданылады.

Ақылды келісімшарттармен салыстыру

Ақылды келісім-шарт – бұл RDBMS-тен ерекше, блокчейнде сақталатын орындалатын кодты білдіретін термин. Ашық блокчейн желілеріндегі орындалу нәтижелеріне қол жеткізу механизмі дәстүрлі жекеменшік немесе федерациялық дерекқорлардан принцип жағынан өзгеше болғанымен, олар сақталған процедуралар сияқты бірдей қызмет атқарады, бірақ көбінесе құндылық алмасумен байланысты.

Кемшіліктер

Сақталған процедура тілдері көбінесе нақты жеткізушіге тән болады. Дерекқор жеткізушісін ауыстыру әдетте қолданыстағы сақталған процедураларды қайта жазуды қажет етеді. Сақталған процедураларға енгізілген өзгерістерді нұсқаны басқару жүйесінде басқа кодқа қарағанда қадағалау қиын. Өзгерістерді жоба тарихында сақтау үшін скрипттер түрінде қайта жасау қажет, ал процедуралардағы айырмашылықтарды біріктіру және дұрыс бақылау жасау қиын болуы мүмкін. Сақталған процедуралардағы қателер қолданба IDE-сінде құрастыру немесе жинау кезеңінде анықталмайды. Сақталған процедура жоғалған немесе кездейсоқ жойылған жағдайда да осылай. Әртүрлі жеткізушілердің сақталған процедура тілдерінің күрделілік деңгейі әртүрлі. Мысалы, Postgres-тің pgpsql-і Microsoft-тың T SQL-іне қарағанда көбірек тілдік мүмкіндіктерге ие (әсіресе кеңейтімдер арқылы). Сақталған процедураларды жазу және түзетуге арналған құралдардың қолдауы көбінесе басқа бағдарламалау тілдеріне қарағанда нашар, бірақ бұл жеткізушілер мен тілдерге байланысты өзгереді. Мысалы, PL/SQL және T SQL үшін арнайы IDE-лер мен түзету құралдары бар. PL/PgSQL әртүрлі IDE-лерден түзетуден өтуге болады.