A volte potrebbe essere necessario passare l'input alla stored procedure in MySQL. In questo articolo, vedremo come creare una stored procedure MySQL con parametri e i diversi tipi di parametri supportati nelle stored procedure.
Procedura archiviata MySQL con parametri
Di seguito sono riportati i passaggi per creare una stored procedure con i parametri. MySQL supporta 3 tipi di parametri di stored procedure:IN, OUT e INOUT. Diamo un'occhiata a ciascuno di essi in dettaglio
IN - Questa è la modalità di default. In questa modalità, l'istruzione call deve passare l'argomento alla procedura memorizzata. Inoltre, il valore di un parametro di tipo IN è protetto, il che significa che anche se ne modifichi il valore all'interno della procedura memorizzata, rimarrà invariato al di fuori di essa.
FUORI – Il valore di un parametro OUT può essere modificato all'interno della procedura memorizzata e il suo nuovo valore verrà restituito all'istruzione di chiamata.
INOUT – In questo caso, l'istruzione call può passare un argomento e la procedura memorizzata può modificare questo valore e ritrasferirlo all'istruzione call.
Ecco la sintassi della procedura memorizzata con i parametri in MySQL.
[IN | OUT | INOUT] parameter_name datatype[(length)]
Nell'istruzione precedente, specifichiamo prima il tipo di parametro, quindi il nome del parametro e il tipo di colonna.
Procedura memorizzata MySQL con esempi di parametri
Diamo un'occhiata ad alcuni esempi di stored procedure con parametri.
Parametro IN
Ecco la query SQL per creare una stored procedure con il parametro IN.
mysql> DELIMITER // mysql> CREATE PROCEDURE get_product( IN prod_id int ) BEGIN SELECT * FROM products WHERE product_id = prod_id; END // mysql> DELIMITER ; mysql> call get_product(1); +------------+--------------+-------+ | product_id | product_name | price | +------------+--------------+-------+ | 1 | iPhone 11 | 400 | +------------+--------------+-------+ mysql> call get_product(); ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE sample.get_product; expected 1, got 0
Sopra, abbiamo definito un parametro di procedura memorizzata IN prod_id . Quando passiamo il suo argomento nell'istruzione call, la procedura memorizzata restituisce i risultati attesi. Tuttavia, se non si passa un argomento, viene restituito un errore.
Bonus Leggi:Come creare una chiave primaria composita in MySQL
Parametro OUT
Ecco una procedura memorizzata creata utilizzando il parametro OUT.
mysql> DELIMITER $$ mysql> CREATE PROCEDURE get_count( IN prod_id int, OUT total INT ) BEGIN SELECT COUNT(*) INTO total FROM products WHERE product_id = prod_id; END$$ mysql> DELIMITER ; mysql> call get_count(1,@total); mysql> select @total; +--------+ | @total | +--------+ | 1 | +--------+
Nella procedura memorizzata sopra, definiamo 2 parametri:un parametro IN per prod_id e un parametro OUT per memorizzare il risultato della procedura.
Quando passiamo l'id prodotto nell'istruzione call, la nostra procedura memorizzata calcola il conteggio delle righe che corrispondono a questo ID prodotto e memorizza il risultato nel parametro OUT totale
Bonus Leggi:Come troncare la tabella in MySQL
Parametro INOUT
Ecco una procedura memorizzata creata utilizzando il parametro INOUT.
DELIMITER $$ CREATE PROCEDURE counter( INOUT count INT, IN increment INT ) BEGIN SET count = count + increment; END$$ DELIMITER ;
Nella procedura memorizzata sopra abbiamo definito un parametro IN incremento e un parametro INOUT count che memorizza il risultato della procedura memorizzata. La nostra procedura memorizzata fondamentalmente aggiunge l'incremento contare parametro e memorizza il risultato in count parametro.
mysql> SET @count = 10; mysql> CALL counter(@count,1); mysql> SELECT @count; +--------+ | @count | +--------+ | 11 | +--------+
Si spera che ora sia possibile creare facilmente stored procedure con parametri in MySQL.
Bonus Lettura:MySQL DROP VIEW
Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!