Mysql
 sql >> Database >  >> RDS >> Mysql

Stored procedure MySQL con parametri

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!