Tilbage i MariaDB Server 10.3 tilføjede vi en ny SQL-tilstand (SQL_MODE=ORACLE) for at give kompatibilitet med et undersæt af Oracle PL/SQL, en proceduremæssig udvidelse til Structured Query Language (SQL). Med den nylige udgivelse af MariaDB Community Server 10.6 har vi fortsat vores rejse for at udvide MariaDBs PL/SQL-kompatibilitet ved at tilføje flere funktioner såsom ROWNUM()
, ADD_MONTHS()
og TO_CHAR()
. Dette er så fedt af en række årsager, men til at starte med er MariaDB fortsat den eneste database, der implementerer open source Oracle-kompatibilitet, så denne funktionalitet er tilgængelig for alle. For virkelig at forstå, hvad det betyder, er det vigtigt for os at tage et kort skridt tilbage, så du ved hvorfor vi startede ned ad denne vej til at begynde med.
Kraften ved proceduremæssig og deklarativ programmering
Ved at kombinere datamanipulationskraften i SQL-sproget med proceduremæssige muligheder har udviklere et væld af spændende, nye muligheder. Ved at bruge PL/SQL har udviklere mulighed for at udføre SQL-sætninger, der fokuserer på den deklarative tilgang til "hvad de skal gøre", samtidig med at de får mulighed for at kontrollere strømmen af operationer, eller "hvordan man gør" det.
Vent, hvad? OK, overvej følgende traditionelle SQL-sætning.
SELECT id, name, has_kids FROM friends;
Enkel, elegant og effektiv. SQL er et smukt sprog, men det har sine begrænsninger. For eksempel, hvad nu hvis du ønskede at gå gennem resultaterne returneret fra SELECT
erklæringsudførelse? Og så, mens du analyserer resultaterne, skal du kontrollere hvert resultat ved hjælp af en betinget sætning (f.eks. hvis has_kids
er sandt), så du kan udføre specifikke operationer baseret på disse forhold?
Hurtig bemærkning :Dette er rent hypotetisk. Jeg er sikker på, at hvis du har venner med børn og venner uden børn, så behandler du dem alle ens. Men for dette eksempels skyld, lad os sige, at du ikke gør det. OKAY? Okay, fedt.
Men med alle de gentagelser og betingelser, der sker, er det muligt, at du løber ind i en fejl. Ville det ikke være rart, hvis du kunne håndtere fejl (dvs. undtagelser) direkte på databasesiden, uden først at skulle returnere de originale resultater tilbage til applikationskoden for at blive behandlet? Nå, det er bare for dårligt, for du bruger almindelig SQL, og ingen af disse ting er mulige.
Frygt ej! Tag i stedet med mig til den vidunderlige verden af PL/SQL!
Ved at bruge noget, der er kendt som en PL/SQL-blok, kan du kombinere den SQL, du kender og elsker, med de proceduremæssige muligheder, der giver dig mulighed for at kontrollere strømmen af operationer ved hjælp af funktioner såsom evnen til at erklære variabler, håndtere betingelser, loop gennem data, administrer undtagelser og meget mere.
PL/SQL-blokke håndteres i MariaDB Server, hvor SQL- og proceduresætningerne parses og udføres i overensstemmelse hermed.
Ret sejt, ikke? Det bliver så meget bedre! Men tilbage til vores tidligere eksempel. Du kan bruge en enkelt PL/SQL-blok til at opnå alt, hvad jeg angav før.
For eksempel:
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;
Få flere oplysninger
Kraftige ting, ikke? Nå, dette blogindlæg er virkelig kun toppen af isbjerget. Lidt til at vække din appetit, om du vil. Men hvis du gerne vil vide mere, anbefaler jeg stærkt at se et webinar, vi for nylig præsenterede, MariaDB og PL/SQL:Combining the Power of SQL and Procedural Statements. I den dykker vi ned i meget flere detaljer om, hvorfor vi har gjort det til vores mission at tilføje og udvide PL/SQL-understøttelse, og vi inkluderer en række eksempler og en live kodningsdemonstration, der giver dig et førstehånds kig på, hvordan du kan bruge PL/SQL i MariaDB! God kodning, venner!