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-namezu erstellen. Bei den Prozedurnamen wird die Groß-/Kleinschreibung nicht beachtet, was bedeutet, dassnew_procundNEW_PROCidentisch 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,INoderINOUTan, 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 PROCEDUREangezeigt. | 
| 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 alsnicht 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 DATAschreiben könnten (z. B.INSERToderDELETE). | 
| `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.
