sql >> Databáze >  >> RDS >> MariaDB

Kombinace výkonu SQL a procedurálních příkazů s režimem kompatibility Oracle MariaDB

Zpět do MariaDB Server 10.3 jsme přidali nový režim SQL (SQL_MODE=ORACLE), abychom zajistili kompatibilitu s podmnožinou Oracle PL/SQL, procedurálním rozšířením jazyka SQL (Structured Query Language). S nedávnou verzí MariaDB Community Server 10.6 jsme pokračovali v naší cestě k rozšíření kompatibility MariaDB PL/SQL přidáním několika funkcí, jako je ROWNUM() , ADD_MONTHS() a TO_CHAR() . To je tak skvělé z mnoha důvodů, ale pro začátek je MariaDB jedinou databází, která implementuje open source kompatibilitu Oracle, takže tato funkce je dostupná všem. Abychom skutečně pochopili, co to znamená, je důležité, abychom udělali krátký krok zpět, abyste věděli proč začali jsme touto cestou.

Síla procedurálního a deklarativního programování

Spojením schopnosti manipulace s daty jazyka SQL s procedurálními schopnostmi mají vývojáři spoustu vzrušujících nových příležitostí. Pomocí PL/SQL mají vývojáři možnost spouštět příkazy SQL, které se zaměřují na deklarativní přístup „co dělat“, a zároveň mají možnost řídit tok operací nebo „jak to dělat“.

Počkej co? Dobře, zvažte následující tradiční SQL příkaz.

SELECT id, name, has_kids FROM friends;

Jednoduché, elegantní a efektní. SQL je krásný jazyk, ale má svá omezení. Co kdybyste například chtěli procházet výsledky vrácené z SELECT provedení výpisu? Při analýze výsledků pak zkontrolujte každý výsledek pomocí podmíněného příkazu (např. pokud has_kids je pravda), abyste mohli provádět konkrétní operace na základě těchto podmínek?

Rychlá poznámka :To je čistě hypotetické. Jsem si jistý, že pokud máte přátele s dětmi a přátele bez dětí, zacházíte s nimi stejně. Ale pro tento příklad řekněme, že ne. OK? Dobře, v pohodě.

Ale se všemi těmi opakováními a podmínkami je možné, že narazíte na chybu. Nebylo by hezké, kdybyste mohli zpracovávat chyby (tj. výjimky) přímo na straně databáze, aniž byste museli nejprve vracet původní výsledky zpět do kódu aplikace ke zpracování? No, to je prostě škoda, protože používáte obyčejný SQL a žádná z těchto věcí není možná.

Neboj se! Místo toho pojďte se mnou do úžasného světa PL/SQL!

Díky použití něčeho známého jako PL/SQL Block můžete kombinovat SQL, které znáte a máte rádi, s procedurálními schopnostmi, které vám umožní řídit tok operací pomocí funkcí, jako je schopnost deklarovat proměnné, zpracovávat podmínky, smyčky. přes data, spravovat výjimky a mnoho dalšího.

Bloky PL/SQL jsou zpracovávány na serveru MariaDB, kde jsou příkazy SQL a procedurální příkazy analyzovány a odpovídajícím způsobem prováděny.

Docela cool, že? Je to mnohem lepší! Ale zpět k našemu předchozímu příkladu. Můžete použít jeden PL/SQL blok k provedení všeho, co jsem naznačil dříve.

Například:

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;

Další informace

Silná věc, že? No, tento blogový příspěvek je opravdu jen špičkou ledovce. Něco málo na povzbuzení chuti, chcete-li. Pokud se však chcete dozvědět více, vřele doporučuji zhlédnout webinář, který jsme nedávno představili, MariaDB a PL/SQL:Kombinace síly SQL a procedurálních příkazů. V něm se ponoříme do mnohem podrobnějších podrobností o tom, proč jsme si stanovili za cíl přidat a rozšířit podporu PL/SQL, a zahrnujeme různé příklady a živou ukázku kódování, které vám poskytnou první pohled na to, jak můžete použít PL/SQL v rámci MariaDB! Hodně štěstí při programování, přátelé!


  1. Práce kolem zmeškaných optimalizací

  2. Techniky optimalizace dotazů v SQL Server:5 osvědčených postupů pro zvýšení výkonu dotazů

  3. Dotaz na výpočet kumulativního i celkového SUMU nad mzdou

  4. Jak vyřešit ORA-29280:neplatná cesta k adresáři