La funzionalità forse più interessante introdotta nelle ultime versioni del database sono le Stored Procedure. Una stored procedure può essere definita come un insieme di statement SQL che saranno mantenuti sul server.
Lo scopo è quello di evitare al client di riscrivere delle query complesse offrendo la possibilità invece di richiamare una procedura archiviata all'interno del database.
Un altro vantaggio è dato dall'incremento di prestazioni dovuto al fatto che il numero di informazioni che saranno scambiate tra client e server sarà molto minore, chiaramente il costo da pagare sarà un incremento del carico di lavoro sul sistema su cui gira il server MySQL dato che utilizzando queste procedure verrà demandato al server la maggior parte del lavoro mentre sarà alleggerito il carico sul client.
Utilizzare Stored Procedure permette di mantenere delle librerie di funzioni utilizzate comunemente all'interno del database stesso.
I casi in cui l'utilizzo delle procedure è fortemente consigliato sono principalmente quando si abbia a che fare con molti client, scritti magari in linguaggi differenti o basati su piattaforme diverse, i quali però necessitino tutti di effettuare le stesse operazioni sui database oppure quando la sicurezza e il logging delle operazioni sia la caratteristica principale del progetto: utilizzando stored procedure si introduce un ulteriore
livello di sicurezza e di log dato che le applicazioni e gli utenti non accederanno direttamente le tabelle ma potranno solamente eseguire particolari funzioni all'interno delle quali sarà possibile inserire dei meccanismi di log e di audit dedicati.
La sintassi utilizzata nello scrivere Stored Procedure in MySQL segue lo standard dettato da ANSI noto come SQL:2003.
Il team di MySQL AB sta ancora lavorando sull'implementazione delle stored procedure, si cercherà quindi di indicare le funzionalità già utilizzabili nella versione corrente e di segnalare quelle che saranno presenti in una prossima release.
La condizione fondamentale per l'utilizzo delle stored procedure è la presenza delle tabella proc nel database mysql, questa tabella viene creata durante l'installazione di questa versione del server, se si fosse effettuato invece un upgrade da una versione precedente verificare che esista.
Le routine in MySQL, sia che siano stored procedure oppure funzioni, sono create tramite l'istruzione CREATE PROCEDURE
oppure CREATE FUNCTION
.
Ciò che differenzia una procedura da una funzione è innanzitutto il fatto che nel primo caso l'invocazione deve avvenire utilizzando una
istruzione di CALL
mentre nel secondo caso è possibile utilizzare direttamente una funzione definita dall'utente
all'interno di una istruzione SQL così come si fa per le altre funzioni presenti in MySQL.
L'altra differenza tra le due modalità di gestione delle routine è che nel caso di procedure l'unico modo di ritornare dei valori è dato dall'utilizzo di variabili output mentre le funzioni possono ritornare direttamente un valore scalare.
In MySQL 5.0.1 le routine sono associate ad un particolare database, questo significa principalmente che rimuovendo (DROP) un database vengono cancellate anche tutte le Stored Procedure e Funzioni associate, che all'interno delle routine non è possible cambiare il database di riferimento tramite l'istruzione USE
e infine che è possibile richiamare routine appartenenti ad altri database indicandolo prima del nome della funzione/procedura. Si noti come questo comportamento è totalmente diverso da quello definito nella versione 5.0.0 nella quale le routine avevano valenza globale.
MySQL offre una estensione molto interessante all' SQL Standard: la possibilità di utilizzare statement di SELECT
direttamente all'interno di una stored procedure, in questo caso il record set risultante verrà inviato direttamente al client che sta eseguendo la procedura.
Output Parameter
Una domanda, impostando un parametro di output nella stored procedure, come faccio a leggerlo una volta richiamta la stored procedure? intendo da codice PHP.
Riesco a richiamare la stored procedure con la solita chiamata :
call sp_a ('','',@out)
ma quel @out dopo che ci faccio?
Grazie
Come creare una procedure
Non mi e'ben chiaro come e dove si crea una procedura. Ci cuole un tool speciale? oppure va creata come testo e poi salvata nel DB? e come?
RispondiInsert con parametri
insert into tab (a,b) values(.....) ho provato con @ con # con ? niente....uso mysql 4.0.1 e VB.net