Una stored procedure (lett. "procedura memorizzata" in italiano), nota anche semplicemente come procedura o funzione,[1][2] è un programma conservato all'interno di un database ed eseguito dal DBMS associato. Vengono principalmente utilizzate come mezzo per massimizzare il riuso di codice relativo a operazioni di amministrazione e manipolazione dei dati, oltre che indebolire l'accoppiamento tra una database e le applicazioni che lo utilizzano, risultando in un sistema complessivamente più robusto.[3]
La maggior parte dei DBMS supporta l'uso di diversi linguaggi di programmazione per la scrittura delle procedure.[2] A parte SQL e dialetti proprietari, essi possono essere divisi in due categorie: linguaggi general-purpose[4] e linguaggi procedurali dedicati.[5]
Alcuni DBMS[quali?] consentono di criptare le stored procedure. Questa pratica viene usata dai produttori di software per fare in modo che il cliente non possa leggerle. Questo modo di distribuire il software è detto closed source, il cui codice cioè deve restare segreto per evitare che venga studiato o modificato.
Generalizzando, a seconda delle loro caratteristiche si distinguono diversi tipi di procedure:
Funzioni | restituiscono un singolo valore oltre ad accettare parametri di ingresso e/o uscita |
Procedure | non restituiscono valori ma accettano parametri di ingresso e/o uscita |
Trigger | sono attivati da eventi |
I linguaggi utilizzabili per la scrittura delle stored procedure sono molti e dipendono dal DBMS che si utilizza. I più diffusi sono sicuramente Java e C/C++. I DBMS offrono anche versioni strutturate di SQL in modo che possa essere utilizzato per scrivere procedure che contengano condizioni e cicli. I più famosi sono:
Sebbene lo standard SQL:2003 preveda diversi costrutti che fanno di SQL un linguaggio procedurale, i DBMS che implementano le stored procedure tendono a utilizzare estensioni specifiche, o a basarsi sulle implementazioni più diffuse anziché sullo standard. A ciò si aggiunge il fatto che i DBMS più leggeri non implementano affatto le stored procedure o altri tipi di routine. Per questi motivi, i costrutti procedurali sono quella parte dell'SQL più soggetta a variazioni quando si passa da un dialetto all'altro.
Le estensioni procedurali di SQL comprendono:
I principali vantaggi che derivano dall'utilizzo delle stored procedure sono i seguenti:
Gli svantaggi principali sono invece i seguenti: