Gespeicherte MySQL-Prozedur mit Parametern
Dieses Tutorial informiert über gespeicherte MySQL-Prozeduren und zeigt, wie wir sie mit und ohne Parameter erstellen können.
Gespeicherte MySQL-Prozedur mit Parametern
Eine gespeicherte Prozedur ist ein Unterprogramm oder ein Codeblock, den Sie definieren, um eine bestimmte Aufgabe auszuführen. Sie ähneln Funktionen
in anderen Programmiersprachen.
Die Prozeduren werden in einer relationalen Datenbank gespeichert und können mehrfach aufgerufen und verwendet werden. Sie müssen beim Erstellen einer gespeicherten Prozedur einen Namen zuweisen.
Darüber hinaus können Sie ihm auch Parameter zuweisen. Nachfolgend finden Sie die Syntax zum Erstellen einer gespeicherten MySQL-Prozedur.
Syntax zum Erstellen einer gespeicherten MySQL-Prozedur
CREATE
[DEFINER = user]
PROCEDURE [IF NOT EXISTS] procedure_name ([procedure_parameters[,...]])
[characteristic ...] routine_body
procedure_parameters: [ IN | OUT | INOUT ] parameters_name type
type : _Any valid MySQL _data type
characteristic: {
COMMENT '_string_'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
routine_body: Valid SQL routine statement
Wenn Sie die obige Syntax überwältigend finden, können Sie sich auf die einfachere Version der obigen Syntax beziehen, die unten angegeben ist.
DELIMITER {custom delimiter}
CREATE PROCEDURE procedure_name([IN | OUT | INOUT] param_1 [DATATYPE], ...)
BEGIN
// Your Code
END;
{custom delimiter}
Rufen Sie die gespeicherte MySQL-Prozedur auf
Wir können den folgenden Befehl verwenden, um die gespeicherte MySQL-Prozedur nach ihrer Erstellung aufzurufen
.
call procedure_name(param_1, param2,...);
Halten Sie beim Erstellen einer gespeicherten Prozedur in MySQL die folgenden Punkte stets griffbereit:
- Verwenden Sie den Befehl
CREATE PROCEDURE
, um eine gespeicherte MySQL-Prozedur gefolgt vomprocedure-name
zu erstellen. Bei den Prozedurnamen wird die Groß-/Kleinschreibung nicht beachtet, was bedeutet, dassnew_proc
undNEW_PROC
identisch sind. - Eine Datenbank kann nicht zwei Prozeduren mit demselben Namen haben.
- Die Namen von Prozeduren können abgegrenzt werden. Wenn der Name begrenzt ist, sind Leerzeichen erlaubt.
- Ein Prozedurname darf 64 Zeichen nicht überschreiten.
- Verwenden Sie nicht die standardmäßig eingebauten Funktionsnamen von MySQL als Prozedurnamen; andernfalls führt dies zu einem Fehler.
- Ein Klammerpaar
()
bildet die letzte Komponente vonCREATE PROCEDURE
. Klammern enthalten Parameter; Wenn keine Parameter vorhanden sind, verwenden Sie leere Klammern. - Im nächsten Abschnitt werden die Aussagen geschrieben.
- Geben Sie die Parameter als
OUT
,IN
oderINOUT
an, was nur für Prozeduren gilt. Wir müssen diesen Schritt ausführen, wenn Sie Parameter übergeben möchten.
den IN
-Parameter in der gespeicherten MySQL-Prozedur
Der Parameter IN
übergibt den Wert an eine gespeicherte Prozedur.
DELIMITER //
CREATE PROCEDURE simple_addition (IN param_1 INT, IN param_2 INT)
BEGIN
SELECT param_1 + param_2;
END //
DELIMITER ;
CALL simple_addition(2,4); #produces 6 as output
AUSGANG:
param_1 + param_2
6
den OUT
-Parameter in MySQL Stored Procedure
Wir können den Wert des OUT
-Parameters innerhalb der gespeicherten Prozedur aktualisieren, die weiter an ein aufrufendes Programm zurückgegeben wird.
DELIMITER //
CREATE PROCEDURE simple_addition (IN param_1 INT, IN param_2 INT, OUT param_3 INT)
BEGIN
SET param_3 = param_1 + param_2;
END //
DELIMITER ;
CALL simple_addition(2,4, @output_var);
SELECT @output_var;
AUSGANG:
@output_var
6
den INOUT
-Parameter in der gespeicherten MySQL-Prozedur
Ein INOUT
-Parameter kombiniert IN
- und OUT
-Parameter. Das aufrufende Programm kann ein Argument übergeben, das von der gespeicherten Prozedur geändert werden kann und den neuen Wert an das aufrufende Programm zurückgibt.
DELIMITER //
CREATE PROCEDURE counter(INOUT set_counter INT, IN increment INT)
BEGIN
SET set_counter = set_counter + increment;
END //
DELIMITER ;
SET @counter = 1;
CALL counter(@counter,2); -- 3
CALL counter(@counter,5); -- 8
SELECT @counter; -- 8
AUSGANG:
@counter
8
Hier verwenden wir increment
als Eingabeparameter, während set_counter
ein Eingabe- und ein Ausgabeparameter ist.
Merkmale der gespeicherten MySQL-Prozedur
MySQL gibt Ihnen Zugang, um die Eigenschaften der Prozedur zu beschreiben, die Sie erstellen.
characteristic: {
COMMENT '_string_'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
Diesen Merkmalen folgen die Klammern und die vorangestellte BEGIN
-Klausel. Diese Merkmale sind jedoch optional; Sie müssen diese Codezeilen nicht jedes Mal explizit schreiben.
Charakteristisch | Erläuterung |
---|---|
COMMENT |
Wird verwendet, um die gespeicherte Routine zu beschreiben; alle Details werden durch die Anweisung SHOW CREATE PROCEDURE angezeigt. |
LANGUAGE |
Es zeigt an, dass der Hauptteil der Prozedur in SQL geschrieben wurde. |
[NICHT] DETERMINISTISCH |
Eine Routine gilt als deterministisch , wenn sie für dieselben Eingabeparameter konsistent dasselbe Ergebnis liefert, und als nicht deterministisch , wenn dies nicht der Fall ist. |
ENTHÄLT SQL |
Es zeigt an, dass die Routine keine Anweisungen enthält, die Daten lesen oder schreiben. |
KEIN SQL |
Es zeigt das Vorhandensein von NO SQL -Anweisungen in der Prozedur an. |
LIEST SQL-DATEN |
Die Prozedur umfasst nur Anweisungen, die Daten lesen, wie beispielsweise der Befehl SELECT . |
ÄNDERT SQL-DATEN |
Ein Programm enthält Anweisungen, die Daten als MODIFIES SQL DATA schreiben könnten (z. B. INSERT oder DELETE ). |
`SQL-SICHERHEIT{DEFINER | AUFRUFER}` |
Alle oben genannten Werte der charakteristischen Klauseln sind standardmäßig. Beispielsweise erzeugen die folgenden beiden gespeicherten Prozeduren dieselbe Ausgabe.
DELIMITER //
CREATE PROCEDURE procedure_name ()
BEGIN
SELECT CURRENT_DATE();
END //
DELIMITER ;
call procedure_name(); -- 2022-09-05
Der obige Code ist derselbe wie bei der expliziten Erwähnung von Merkmalen.
DELIMITER //
CREATE PROCEDURE procedure_name ()
COMMENT ''
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
BEGIN
SELECT CURRENT_DATE();
END //
DELIMITER ;
call procedure_name(); -- 2022-09-05
Wir haben also gelernt, wie man Parameter mit Prozeduren in MySQL verwendet.