Обратно в MariaDB Server 10.3 добавихме нов SQL режим (SQL_MODE=ORACLE), за да осигурим съвместимост с подмножество на Oracle PL/SQL, процедурно разширение към езика за структурирани заявки (SQL). С неотдавнашната версия на MariaDB Community Server 10.6, ние продължихме нашето пътуване да разширим PL/SQL съвместимостта на MariaDB, като добавихме няколко функции като ROWNUM()
, ADD_MONTHS()
и TO_CHAR()
. Това е толкова страхотно поради редица причини, но като начало, MariaDB остава единствената база данни, която прилага съвместимост с Oracle с отворен код, така че тази функционалност е достъпна за всички. За да разберем наистина какво означава това, за нас е важно да направим кратка крачка назад, за да разберете защо започнахме по този път за начало.
Силата на процедурното и декларативното програмиране
Чрез комбиниране на силата за манипулиране на данни на езика SQL с процедурни възможности, разработчиците имат изобилие от вълнуващи, нови възможности. Използвайки PL/SQL, разработчиците имат способността да изпълняват SQL изрази, които се фокусират върху декларативния подход „какво да се прави“, като същевременно им е предоставена възможността да контролират потока от операции или „как да го направя“.
Чакаме какво? Добре, помислете за следното традиционно SQL израз.
SELECT id, name, has_kids FROM friends;
Просто, елегантно и ефектно. SQL е красив език, но има своите ограничения. Например, какво ще стане, ако искате да прегледате резултатите, върнати от SELECT
изпълнение на изявление? И след това, докато анализирате резултатите, проверете всеки резултат с помощта на условно изявление (напр. if has_kids
е вярно), за да можете да извършвате конкретни операции въз основа на тези условия?
Бърза бележка :Това е чисто хипотетично. Сигурен съм, че ако имате приятели с деца и приятели без деца, вие се отнасяте към тях еднакво. Но в името на този пример, да кажем, че не го правите. ДОБРЕ? Добре, готино.
Но с всички тези повторения и условия, които се случват, е възможно да срещнете грешка. Не би ли било хубаво, ако можете да обработвате грешки (т.е. изключения) директно от страната на базата данни, без да се налага първо да връщате оригиналните резултати обратно в кода на приложението, който да бъде обработен? Е, това е твърде лошо, защото използвате обикновен SQL и нито едно от тези неща не е възможно.
Не се страхувайте! Вместо това елате с мен в прекрасния свят на PL/SQL!
Чрез използването на нещо, известно като PL/SQL Block, можете да комбинирате SQL, който познавате и обичате, с процедурните възможности, които ще ви позволят да контролирате потока от операции, като използвате функции като възможността за деклариране на променливи, обработка на условия, цикъл чрез данни, управлявайте изключенията и много други.
PL/SQL блоковете се обработват в MariaDB Server, където SQL и процедурните оператори се анализират и изпълняват съответно.
Доста готино, нали? Става много по-добре! Но да се върнем към предишния ни пример. Можете да използвате единичен PL/SQL блок, за да постигнете всичко, което посочих преди.
Например:
DELCARE CURSOR c IS SELECT id, name, has_kids FROM friends; BEGIN FOR friend_row IN c LOOP IF friend_row.has_kids == true THEN /* Do something */ ELSE /* Do something else */ END IF; END LOOP; EXCEPTION WHEN no_data_found THEN /* Handle no data found */ WHEN others THEN /* Handle all other kinds of exceptions */ END;
Научете повече
Мощни неща, нали? Е, тази публикация в блога наистина е само върхът на айсберга. Малко нещо, което да възбуди апетита ви, ако щете. Но ако искате да научите повече, силно препоръчвам да гледате уебинар, който наскоро представихме, MariaDB и PL/SQL:Комбиниране на силата на SQL и процедурни изявления. В него се потапяме в много по-подробно защо сме поставили за наша мисия да добавяме и разширяваме поддръжката на PL/SQL и включваме различни примери и демонстрация на кодиране на живо, които ви дават да видите от първа ръка как можете да използвате PL/SQL в MariaDB! Приятно кодиране, приятели!