Una stored procedure è un programma scritto in SQL o in altri linguaggi, mantenuto nel database stesso, archiviato nel cosiddetto database data dictionary. Spesso è scritta in versioni proprietarie di SQL, che sono dei veri e propri linguaggi strutturati, come il PL/pgSQL di PostgreSQL o il PL/SQL di Oracle, all'interno dei quali è possibile scrivere codice SQL. Generalizzando, a seconda delle loro caratteristiche si distinguono diversi tipi di sottoprogrammi:
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 |
Generalmente il DBMS compila le stored procedure, il che significa che le ottimizza e stabilisce il piano di esecuzione delle query.
Alcuni DBMS 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.
I principali vantaggi che derivano dall'utilizzo delle stored procedure sono i seguenti:
Gli svantaggi principali sono invece i seguenti:
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: