Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gespeicherte MySQL-Prozedur mit Parametern

Manchmal müssen Sie möglicherweise Eingaben an gespeicherte Prozeduren in MySQL übergeben. In diesem Artikel sehen wir uns an, wie man eine gespeicherte MySQL-Prozedur mit Parametern und den verschiedenen Arten von Parametern erstellt, die in gespeicherten Prozeduren unterstützt werden.

Gespeicherte MySQL-Prozedur mit Parametern

Hier sind die Schritte zum Erstellen einer gespeicherten Prozedur mit Parametern. MySQL unterstützt drei Arten von Parametern für gespeicherte Prozeduren – IN, OUT und INOUT. Sehen wir uns jeden von ihnen im Detail an

EIN – Dies ist der Standardmodus. In diesem Modus muss die Aufrufanweisung das Argument an die gespeicherte Prozedur übergeben. Außerdem ist der Wert eines Parameters vom Typ IN geschützt, d. h. selbst wenn Sie seinen Wert innerhalb der gespeicherten Prozedur ändern, bleibt er außerhalb unverändert.

AUS – Der Wert eines OUT-Parameters kann innerhalb einer gespeicherten Prozedur geändert werden, und sein neuer Wert wird an die Aufrufanweisung zurückgegeben.

INOUT – In diesem Fall kann die Aufrufanweisung ein Argument übergeben, und die gespeicherte Prozedur kann diesen Wert ändern und an die Aufrufanweisung zurückgeben.

Hier ist die Syntax für gespeicherte Prozeduren mit Parametern in MySQL.

[IN | OUT | INOUT] parameter_name datatype[(length)]

In der obigen Anweisung geben wir zuerst den Parametertyp an, dann den Parameternamen und den Spaltentyp.

Gespeicherte MySQL-Prozedur mit Parameterbeispielen

Sehen wir uns einige Beispiele für gespeicherte Prozeduren mit Parametern an.

IN-Parameter

Hier ist die SQL-Abfrage zum Erstellen einer gespeicherten Prozedur mit IN-Parameter.

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

Oben haben wir einen IN-Stored-Procedure-Parameter prod_id definiert . Wenn wir ihr Argument in der Aufrufanweisung übergeben, gibt die gespeicherte Prozedur die erwarteten Ergebnisse zurück. Wenn Sie jedoch kein Argument übergeben, wird ein Fehler ausgegeben.

Bonuslektüre:So erstellen Sie einen zusammengesetzten Primärschlüssel in MySQL

OUT-Parameter

Hier ist eine gespeicherte Prozedur, die mit dem OUT-Parameter erstellt wurde.

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 |
+--------+

In der obigen gespeicherten Prozedur definieren wir 2 Parameter – einen IN-Parameter für prod_id und einen OUT-Parameter zum Speichern des Verfahrensergebnisses.

Wenn wir die Produkt-ID in der Aufrufanweisung übergeben, berechnet unsere gespeicherte Prozedur die Anzahl der Zeilen, die mit dieser Produkt-ID übereinstimmen, und speichert das Ergebnis im OUT-Parameter total

Bonus-Lesetext:Wie man Tabellen in MySQL abschneidet

INOUT-Parameter

Hier ist eine gespeicherte Prozedur, die mit dem INOUT-Parameter erstellt wurde.

DELIMITER $$

CREATE PROCEDURE counter(
	INOUT count INT,
    IN increment INT
)
BEGIN
	SET count = count + increment;
END$$

DELIMITER ;

In der obigen Stored Procedure haben wir einen IN-Parameter increment definiert und einen INOUT-Parameter count die das Ergebnis der gespeicherten Prozedur speichert. Unsere gespeicherte Prozedur fügt im Grunde das Inkrement hinzu zu zählen Parameter und speichert das Ergebnis in count Parameter.

mysql> SET @count = 10;

mysql> CALL counter(@count,1);

mysql> SELECT @count;
+--------+
| @count |
+--------+
|     11 |
+--------+

Hoffentlich können Sie jetzt problemlos gespeicherte Prozeduren mit Parametern in MySQL erstellen.

Bonuslektüre:MySQL DROP VIEW

Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!