Heim  >  Artikel  >  Datenbank  >  Welche Parametertypen gibt es in gespeicherten MySQL-Prozeduren?

Welche Parametertypen gibt es in gespeicherten MySQL-Prozeduren?

青灯夜游
青灯夜游Original
2022-01-24 18:36:2312433Durchsuche

Es gibt drei Parametertypen für gespeicherte MySQL-Prozeduren: 1. Eingabeparameter, identifiziert durch das Schlüsselwort „IN“, können an eine gespeicherte Prozedur übergeben werden. 2. Ausgabeparameter, identifiziert durch das Schlüsselwort „OUT“, werden verwendet, wenn die Die gespeicherte Prozedur muss die Situation eines Operationsergebnisses zurückgeben. 3. Eingabe- und Ausgabeparameter, markiert mit dem Schlüsselwort „INOUT“.

Welche Parametertypen gibt es in gespeicherten MySQL-Prozeduren?

Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.

Gespeicherte Prozedur:

Eine Reihe programmierbarer Funktionen, bei denen es sich um eine Reihe von SQL-Anweisungen zur Ausführung bestimmter Funktionen handelt. Sie werden kompiliert, erstellt und in der Datenbank gespeichert und Aufrufausführung mit Argumenten (bei Bedarf).

Vorteile (warum gespeicherte Prozeduren verwenden?):

  ①Kapseln Sie einige sich stark wiederholende Vorgänge in einer gespeicherten Prozedur und vereinfachen Sie so die Aufrufe dieser SQL

  ②Stapelverarbeitung: SQL + Schleife, reduzieren Sie den Datenverkehr, das heißt, „Batches ausführen“

③Einheitliche Schnittstelle zur Gewährleistung der Datensicherheit

Im Vergleich zur Oracle-Datenbank haben die gespeicherten Prozeduren von MySQL eine relativ schwache Funktion und werden weniger verwendet.

1. Erstellung und Aufruf von gespeicherten Prozeduren

  >Eine gespeicherte Prozedur ist ein Codestück mit einem Namen, der zum Ausführen einer bestimmten Funktion verwendet wird.

  >Die erstellte gespeicherte Prozedur wird im Datenwörterbuch der Datenbank gespeichert.

1. Erstellen Sie eine gespeicherte Prozedur

CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name 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

[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

#Erstellen Sie eine Datenbank und sichern Sie die Datentabelle für Beispieloperationen

mysql> create database db1;
mysql> use db1;    
mysql> create table PLAYERS as select * from TENNIS.PLAYERS;
mysql> create table MATCHES  as select * from TENNIS.MATCHES;

Beispiel: Erstellen Sie eine gespeicherte Prozedur, um alle von einem bestimmten Spieler gespielten Spiele zu löschen

Standardsituation Unter ist die gespeicherte Prozedur mit der Standarddatenbank verknüpft. Wenn Sie angeben möchten, dass die gespeicherte Prozedur unter einer bestimmten Datenbank erstellt wird, fügen Sie den Datenbanknamen als Präfix vor dem Prozedurnamen hinzu

Beim Definieren Verwenden Sie für die Prozedur den Befehl DELIMITER $$, um die Anweisung zu ändern. Das Endsymbol wird vorübergehend vom Semikolon in zwei $$ geändert, sodass das im Prozedurhauptteil verwendete Semikolon direkt an den Server übergeben wird, ohne vom Client interpretiert zu werden (z. B als MySQL).

2. Rufen Sie die gespeicherte Prozedur auf: call sp_name[(Parameter übergeben)];

mysql> delimiter $$  #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
    -> BEGIN
    ->   DELETE FROM MATCHES
    ->    WHERE playerno = p_playerno;
    -> END$$
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;  #将语句的结束符号恢复为分号
Analyse:

 In der gespeicherten Prozedur wird die zu übergebende Variable p_playerno festgelegt, 57 wird durch Übergabe der Parameter übergeben. Weisen Sie p_playerno einen Wert zu und führen Sie dann die SQL-Operation in der gespeicherten Prozedur aus.

3. Hauptteil der gespeicherten Prozedur

  > Anweisungen zum Deklarieren von Variablen. Wait

  >Format des Prozedurkörpers: Beginnen Sie mit „begin“ und enden Sie mit „end“ (kann verschachtelt werden)

mysql> select * from MATCHES;
+---------+--------+----------+-----+------+
| MATCHNO | TEAMNO | PLAYERNO | WON | LOST |
+---------+--------+----------+-----+------+
|       1 |      1 |        6 |   3 |    1 |
|       7 |      1 |       57 |   3 |    0 |
|       8 |      1 |        8 |   0 |    3 |
|       9 |      2 |       27 |   3 |    2 |
|      11 |      2 |      112 |   2 |    3 |
+---------+--------+----------+-----+------+
5 rows in set (0.00 sec)

mysql> call delete_matches(57);
Query OK, 1 row affected (0.03 sec)

mysql> select * from MATCHES;
+---------+--------+----------+-----+------+
| MATCHNO | TEAMNO | PLAYERNO | WON | LOST |
+---------+--------+----------+-----+------+
|       1 |      1 |        6 |   3 |    1 |
|       8 |      1 |        8 |   0 |    3 |
|       9 |      2 |       27 |   3 |    2 |
|      11 |      2 |      112 |   2 |    3 |
+---------+--------+----------+-----+------+
4 rows in set (0.00 sec)

Hinweis: Jeder verschachtelte Block und jede darin enthaltene Anweisung muss mit einem Semikolon enden, das das Ende angibt Prozesskörper. -end-Block (auch zusammengesetzte Anweisung genannt) erfordert kein Semikolon.

4. Label-Anweisungsblöcke

BEGIN
  BEGIN
    BEGIN
      statements; 
    END
  END
END
Zum Beispiel:
[begin_label:] BEGIN
  [statement_list]
END [end_label]

Labels haben zwei Funktionen:

  ①Verbessern Sie die Lesbarkeit des Codes

 ②In einigen Anweisungen (zum Beispiel: Leave- und Iterate-Anweisungen) ist die Verwendung erforderlich Tags

2. Parameter gespeicherter Prozeduren

  Gespeicherte Prozeduren können 0 oder mehr Parameter haben, die für die Definition gespeicherter Prozeduren verwendet werden.

Gespeicherte MySQL-Prozeduren unterstützen drei Arten von Parametern, nämlich Eingabeparameter, Ausgabeparameter und Eingabe-/Ausgabeparameter, die jeweils durch die drei Schlüsselwörter IN, OUT und INOUT identifiziert werden.
Unter diesen können Eingabeparameter an eine gespeicherte Prozedur übergeben werden, Ausgabeparameter werden verwendet, wenn die gespeicherte Prozedur ein Operationsergebnis zurückgeben muss, und Eingabe-/Ausgabeparameter können sowohl als Eingabeparameter als auch als Ausgabeparameter dienen.

3 Parametertypen:

IN-Eingabeparameter: zeigt an, dass der Aufrufer einen Wert an den Prozess übergibt (der eingehende Wert kann ein Literal oder eine Variable sein)
  • OUT-Ausgabeparameter: zeigt an, dass der Prozess Übergibt den Wert an den Aufrufer. Ausgehende Werte (können mehrere Werte zurückgeben) (ausgehende Werte können nur Variablen sein)
  • INOUT-Eingabe- und Ausgabeparameter: Dies bedeutet, dass der Aufrufer einen Wert an den Prozess übergibt bedeutet, dass der Prozess einen Wert an den Aufrufer übergibt (der Wert kann nur eine Variable sein)
  • label1: BEGIN
      label2: BEGIN
        label3: BEGIN
          statements; 
        END label3 ;
      END label2;
    END label1

    2. inout-Eingabeparameter
mysql> delimiter $$
mysql> create procedure in_param(in p_in int)
    -> begin
    ->   select p_in;
    ->   set p_in=2;
    ->    select P_in;
    -> end$$
mysql> delimiter ;

mysql> set @p_in=1;

mysql> call in_param(@p_in);
+------+
| p_in |
+------+
|    1 |
+------+

+------+
| P_in |
+------+
|    2 |
+------+

mysql> select @p_in;
+-------+
| @p_in |
+-------+
|     1 |
+-------+
#以上可以看出,p_in在存储过程中被修改,但并不影响@p_id的值,因为前者为局部变量、后者为全局变量。

Hinweis:  ①Wenn der Prozess keine Parameter hat, muss er auch Klammern nach dem Prozedurnamen schreiben

  Beispiel: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) ……  ②Stellen Sie sicher, dass die Der Name des Parameters ist nicht gleich dem Namen der Spalte, andernfalls wird der Parametername im Prozedurkörper wie folgt angezeigt: Behandle ihn als Spaltennamen

[Verwandte Empfehlung: MySQL-Video-Tutorial]

Das obige ist der detaillierte Inhalt vonWelche Parametertypen gibt es in gespeicherten MySQL-Prozeduren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn