sql >> Database >  >> RDS >> MariaDB

De kracht van SQL en procedurele verklaringen combineren met MariaDB's Oracle-compatibiliteitsmodus

Terug in MariaDB Server 10.3 hebben we een nieuwe SQL-modus (SQL_MODE=ORACLE) toegevoegd om compatibiliteit te bieden met een subset van Oracle PL/SQL, een procedurele uitbreiding van de Structured Query Language (SQL). Met de recente release van MariaDB Community Server 10.6 zijn we verder gegaan op onze reis om MariaDB's PL/SQL-compatibiliteit uit te breiden door verschillende functies toe te voegen, zoals ROWNUM() , ADD_MONTHS() en TO_CHAR() . Dit is om een ​​aantal redenen zo cool, maar om te beginnen blijft MariaDB de enige database die open source Oracle-compatibiliteit implementeert, dus deze functionaliteit is voor iedereen beschikbaar. Om echt te begrijpen wat dat betekent, is het belangrijk voor ons om een ​​korte stap terug te doen, zodat u weet waarom we begonnen dit pad om mee te beginnen.

De kracht van procedureel en declaratief programmeren

Door de gegevensmanipulatiekracht van de SQL-taal te combineren met procedurele mogelijkheden, hebben ontwikkelaars een overvloed aan opwindende, nieuwe kansen. Met behulp van PL/SQL hebben ontwikkelaars de mogelijkheid om SQL-instructies uit te voeren die gericht zijn op de declaratieve benadering van "wat te doen", terwijl ze ook de mogelijkheid krijgen om de stroom van bewerkingen of "hoe het te doen" te beheersen.

Wacht wat? OK, overweeg het volgende traditioneel SQL-instructie.

SELECT id, name, has_kids FROM friends;

Eenvoudig, elegant en effectief. SQL is een mooie taal, maar het heeft zijn beperkingen. Wat als u bijvoorbeeld door de resultaten wilt bladeren die zijn geretourneerd door de SELECT uitvoering van de verklaring? En controleer vervolgens, terwijl u de resultaten analyseert, elk resultaat met behulp van een voorwaardelijke instructie (bijv. if has_kids is waar) zodat u specifieke bewerkingen kunt uitvoeren op basis van die voorwaarden?

Snelle opmerking :Dit is puur hypothetisch. Ik weet zeker dat als je vrienden met kinderen hebt en vrienden zonder kinderen, je ze allemaal hetzelfde behandelt. Maar laten we in het belang van dit voorbeeld zeggen dat u dat niet doet. OKÉ? Oké, leuk.

Maar met al die iteraties en voorwaarden die plaatsvinden, is het mogelijk dat u een fout tegenkomt. Zou het niet fijn zijn als je fouten (d.w.z. uitzonderingen) direct aan de databasekant zou kunnen afhandelen, zonder eerst de originele resultaten terug te moeten sturen naar de te verwerken applicatiecode? Nou, dat is gewoon jammer, want je gebruikt gewone SQL, en geen van die dingen is mogelijk.

Wees niet bang! Ga in plaats daarvan met me mee naar de wondere wereld van PL/SQL!

Door het gebruik van iets dat bekend staat als een PL/SQL-blok, kunt u de SQL die u kent en waar u van houdt combineren met de procedurele mogelijkheden waarmee u de stroom van bewerkingen kunt controleren met behulp van functies zoals de mogelijkheid om variabelen te declareren, voorwaarden af ​​te handelen, door middel van gegevens, beheer van uitzonderingen en nog veel meer.

PL/SQL-blokken worden verwerkt binnen MariaDB Server, waar de SQL- en procedurele instructies worden geparseerd en dienovereenkomstig worden uitgevoerd.

Best cool, toch? Het wordt zo veel beter! Maar terug naar ons vorige voorbeeld. Je kunt een enkel PL/SQL-blok gebruiken om alles te bereiken wat ik eerder heb aangegeven.

Bijvoorbeeld:

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;

Meer informatie

Krachtig spul, toch? Nou, deze blogpost is eigenlijk nog maar het topje van de ijsberg. Een kleinigheidje om je eetlust op te wekken, zo je wilt. Maar als je meer wilt weten, raad ik je ten zeerste aan om een ​​webinar te bekijken dat we onlangs hebben gepresenteerd, MariaDB en PL/SQL:Combinatie van de kracht van SQL en procedurele verklaringen. Hierin duiken we veel meer in detail waarom we het tot onze missie hebben gemaakt om PL/SQL-ondersteuning toe te voegen en uit te breiden en we nemen een verscheidenheid aan voorbeelden op, en een live codeerdemonstratie, die u een eerste hand geven hoe je kunt PL/SQL gebruiken binnen MariaDB! Veel plezier met coderen, vrienden!


  1. Hoe maak je een tijdelijke functie in PostgreSQL?

  2. Top-N-query's en paginering in Oracle

  3. Oracle datum naar string conversie

  4. Wat is het verschil tussen `->>` en `->` in Postgres SQL?