In MariaDB Server 10.3, abbiamo aggiunto una nuova modalità SQL (SQL_MODE=ORACLE) per fornire compatibilità con un sottoinsieme di Oracle PL/SQL, un'estensione procedurale dello Structured Query Language (SQL). Con la recente versione di MariaDB Community Server 10.6, abbiamo continuato il nostro viaggio per espandere la compatibilità PL/SQL di MariaDB aggiungendo diverse funzioni come ROWNUM()
, ADD_MONTHS()
e TO_CHAR()
. Questo è fantastico per una serie di motivi, ma per iniziare, MariaDB rimane l'unico database a implementare la compatibilità Oracle open source, quindi questa funzionalità è disponibile per tutti. Per capire veramente cosa significa, è importante per noi fare un breve passo indietro in modo che tu sappia perché per cominciare abbiamo intrapreso questa strada.
Il potere della programmazione procedurale e dichiarativa
Combinando la potenza di manipolazione dei dati del linguaggio SQL con le capacità procedurali, gli sviluppatori hanno una miriade di nuove ed entusiasmanti opportunità. Usando PL/SQL, gli sviluppatori hanno la possibilità di eseguire istruzioni SQL che si concentrano sull'approccio dichiarativo di "cosa fare", fornendo anche la possibilità di controllare il flusso delle operazioni o "come farlo".
Aspetta cosa? OK, considera il seguente tradizionale Istruzione SQL.
SELECT id, name, has_kids FROM friends;
Semplice, elegante ed efficace. SQL è un bel linguaggio, ma ha i suoi limiti. Ad esempio, se volessi scorrere i risultati restituiti da SELECT
esecuzione dell'istruzione? E poi, durante l'analisi dei risultati, controlla ogni risultato usando un'istruzione condizionale (ad es. if has_kids
è vero) in modo da poter eseguire operazioni specifiche in base a tali condizioni?
Nota rapida :Questo è puramente ipotetico. Sono sicuro che se hai amici con bambini e amici senza bambini li tratti tutti allo stesso modo. Ma, per il bene di questo esempio, diciamo che non lo fai. OK? Va bene, bene.
Ma con tutte quelle iterazioni e condizioni che si verificano è possibile che si verifichi un errore. Non sarebbe bello se potessi gestire gli errori (cioè le eccezioni) direttamente sul lato database, senza dover prima restituire i risultati originali al codice dell'applicazione da elaborare? Beh, è davvero un peccato, perché stai usando un semplice vecchio SQL e nessuna di queste cose è possibile.
Non aver paura! Invece, vieni con me nel meraviglioso mondo di PL/SQL!
Attraverso l'uso di qualcosa noto come blocco PL/SQL, puoi combinare l'SQL che conosci e ami con le capacità procedurali che ti permetteranno di controllare il flusso delle operazioni utilizzando funzionalità come la capacità di dichiarare variabili, gestire condizioni, loop attraverso i dati, gestire le eccezioni e molto altro.
I blocchi PL/SQL vengono gestiti all'interno di MariaDB Server, dove le istruzioni SQL e procedurali vengono analizzate ed eseguite di conseguenza.
Abbastanza bello, vero? Diventa molto meglio! Ma torniamo al nostro esempio precedente. Puoi utilizzare un singolo blocco PL/SQL per eseguire tutto ciò che ho indicato prima.
Ad esempio:
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;
Ulteriori informazioni
Roba potente, giusto? Bene, questo post sul blog è davvero solo la punta dell'iceberg. Qualcosa per stuzzicare l'appetito, se vuoi. Ma se vuoi saperne di più, ti consiglio vivamente di guardare un webinar che abbiamo presentato di recente, MariaDB e PL/SQL:Combinare la potenza di SQL e le istruzioni procedurali. In esso, ci addentriamo in molti più dettagli sul motivo per cui abbiamo deciso di aggiungere ed espandere il supporto PL/SQL e includiamo una varietà di esempi e una dimostrazione di codifica dal vivo, che ti danno uno sguardo in prima persona su come puoi usare PL/SQL all'interno di MariaDB! Buona programmazione, amici!