Gespeicherte MySQL-Prozedur mit Parametern

Preet Sanghavi 20 Juni 2023
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:

  1. Verwenden Sie den Befehl CREATE PROCEDURE, um eine gespeicherte MySQL-Prozedur gefolgt vom procedure-name zu erstellen. Bei den Prozedurnamen wird die Groß-/Kleinschreibung nicht beachtet, was bedeutet, dass new_proc und NEW_PROC identisch sind.
  2. Eine Datenbank kann nicht zwei Prozeduren mit demselben Namen haben.
  3. Die Namen von Prozeduren können abgegrenzt werden. Wenn der Name begrenzt ist, sind Leerzeichen erlaubt.
  4. Ein Prozedurname darf 64 Zeichen nicht überschreiten.
  5. Verwenden Sie nicht die standardmäßig eingebauten Funktionsnamen von MySQL als Prozedurnamen; andernfalls führt dies zu einem Fehler.
  6. Ein Klammerpaar () bildet die letzte Komponente von CREATE PROCEDURE. Klammern enthalten Parameter; Wenn keine Parameter vorhanden sind, verwenden Sie leere Klammern.
  7. Im nächsten Abschnitt werden die Aussagen geschrieben.
  8. Geben Sie die Parameter als OUT, IN oder INOUT 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.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Verwandter Artikel - MySQL Stored Procedure