Verwenden einer Cursorschleife zum Lesen temporärer Tabellen in gespeicherten MySQL-Prozeduren

Verwenden einer Cursorschleife zum Lesen temporärer Tabellen in gespeicherten MySQL-Prozeduren

Cursor

Ein Cursor ist eine Methode zum Anzeigen oder Verarbeiten von Daten in einem Ergebnissatz. Cursor bieten die Möglichkeit, vorwärts oder rückwärts durch die Daten in einem Ergebnissatz zu navigieren, jeweils eine oder mehrere Zeilen gleichzeitig.

So verwenden Sie den Cursor

Definieren Sie einen Cursor: Deklarieren Sie den Cursornamen CURSOR für die Tabelle; (die Tabelle kann auch die Ergebnismenge der Auswahl sein)
Cursor öffnen: Cursorname öffnen;
Holen Sie sich Daten aus dem Ergebnisset in Variablen: Holen Sie den Cursornamen in Feld1, Feld2;
Anweisung ausführen: Führen Sie die Anweisung aus, die Daten verarbeiten muss. Cursor schließen: Cursorname schließen;

BEGINNEN
  #Benutzerdefinierte Variablen deklarieren declare c_stgId int;
  Deklarieren Sie c_stgName varchar (50);
  #Deklarieren Sie die Cursor-Endvariable. Deklaration fertig. INT DEFAULT 0;

  #Deklarieren Sie den Cursor cr und die endgültige Verarbeitungsmethode, nachdem der Cursor den Ergebnisset gelesen hat. Deklarieren Sie den cr-Cursor, um Name, StgId aus StgSummary-Limit 3 auszuwählen.
  Deklarieren Sie den Continue-Handler für nicht gefundenen Satz „Done“ = 1;

  # Cursor öffnen open cr;

  # Schleife readLoop: LOOP
    # Den Wert im Cursor abrufen und ihn der Variablen fetch cr into c_stgName,c_stgId; zuweisen.
    # Bestimmen Sie, ob der Cursor das Ende erreicht hat. Wenn ja, beenden Sie den Cursor. # Notieren Sie dieses Urteil WENN fertig = 1 DANN
      LEAVE readLoop; 
    ENDE, WENN; 
    
      Wählen Sie c_stgName,c_stgId;
    
  ENDE DER SCHLEIFE Leseschleife;
  -- Schließen Sie den Cursor close cr;
ENDE

Hinweis zur Variablendeklarationsanweisung:

  • Die Declare-Anweisung wird normalerweise verwendet, um lokale Variablen, Cursor, Bedingungen oder Handler zu deklarieren
  • Declare-Anweisungen dürfen nur in BEGIN...END-Anweisungen vorkommen und müssen in der ersten Zeile stehen.
  • Die Reihenfolge der Deklaration ist ebenfalls erforderlich. Normalerweise werden zuerst lokale Variablen deklariert, gefolgt von Cursorn und dann Bedingungen und Handlern.

Hinweise zur benutzerdefinierten Variablenbenennung:

Der Name der benutzerdefinierten Variable darf nicht mit dem Namen des Cursor-Ergebnissatzfelds identisch sein. Wenn sie gleich sind, ist die Cursorzuweisung zur Variablen ungültig.

Temporäre Tabellen

Die temporäre Tabelle ist nur in der aktuellen Verbindung sichtbar. Wenn die Verbindung geschlossen wird, löscht MySQL die Tabelle automatisch und gibt den gesamten Speicherplatz frei. Daher können temporäre Tabellen mit demselben Namen in verschiedenen Verbindungen erstellt und Operationen an den zu dieser Verbindung gehörenden temporären Tabellen ausgeführt werden.
Der Unterschied zur normalen Erstellungsanweisung besteht in der Verwendung des Schlüsselworts TEMPORARY.

Temporäre Tabelle erstellen StgSummary(
 Name VARCHAR(50) NOT NULL,
 StgId INT NICHT NULL STANDARD 0
);

Einschränkungen bei der Verwendung temporärer Tabellen

  1. In derselben Abfrageanweisung kann eine temporäre Tabelle nur einmal durchsucht werden. Außerdem kann eine temporäre Tabelle in einer gespeicherten Prozedur nicht mehrmals abgefragt werden. Es können aber auch unterschiedliche temporäre Tabellen in einer Abfrage verwendet werden.
  2. Sie können RENAME nicht verwenden, um eine temporäre Tabelle umzubenennen. Sie können stattdessen jedoch ALTER TABLE verwenden.
ALTER TABLE orig_name RENAME neuer_name;
  • Temporäre Tabellen müssen nach der Verwendung gelöscht werden
Temporäre Tabelle löschen, falls vorhanden StgTempTable;

Verwenden einer Cursorschleife zum Lesen temporärer Tabellendaten in einer gespeicherten Prozedur

BEGINNEN
## Erstellen Sie eine temporäre Tabelle CREATE TEMPORARY TABLE falls nicht vorhanden StgSummary(
 Name VARCHAR(50) NOT NULL,
 StgId INT NICHT NULL STANDARD 0
);
TRUNCATE TABLE StgSummary;

## Temporäre Tabellendaten hinzufügen INSERT INTO StgSummary(Name,StgId)
Wählen Sie „temporäre Daten“,1

BEGINNEN

#Benutzerdefinierte Variable deklarieren c_stgId int;
Deklarieren Sie c_stgName varchar (50);
für erledigt erklären INT DEFAULT 0;

Deklarieren Sie einen CR-Cursor, um Name, StgId aus StgSummary auszuwählen. ORDER BY StgId desc LIMIT 3;
Deklarieren Sie den Continue-Handler für nicht gefundenen Satz „Done“ = 1;

- Öffnen Sie den Cursor, open cr;
testLoop:LOOP
	-- Holen Sie sich das Ergebnis fetch cr in c_stgName,c_stgId;
	WENN fertig = 1 DANN
		LEAVE testLoop; 
	ENDE, WENN; 
	
  
  Wählen Sie c_stgName,c_stgId;
	
ENDE DER SCHLEIFE testLoop;
-- Schließen Sie den Cursor, close cr;

Ende;
Temporäre Tabelle löschen, falls vorhanden StgSummary;
Ende;

Erstellen Sie zunächst eine temporäre Tabelle und definieren Sie dann den Cursor. Die gespeicherte Prozedur kann jedoch trotzdem nicht gespeichert werden. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE ... (Declare-Anweisungen dürfen nur in BEGIN...END -Anweisungen erscheinen und müssen in der ersten Zeile stehen). Sie können sie am Ende also nur durch ein Paar BEGIN...END trennen.

Zusammenfassen

Als ich zuvor gespeicherte SQL Server-Prozeduren schrieb, achtete ich nicht besonders auf dieses Problem. Normalerweise definierte ich Variablen mitten im Programm, nahm MySQL als selbstverständlich hin und schrieb sie nachlässig, was schließlich zu einer Falle führte. Grammatikalisch besteht zwischen den beiden kaum ein Unterschied, dennoch fällt der Unterschied ziemlich plötzlich auf. Ich habe aber schon lange keine SQL-Anweisungen mehr geschrieben und bin daher etwas eingerostet. Besser ist es, den Abdruck schnell aufzuschreiben und zu vertiefen.

Oben finden Sie Einzelheiten zur Verwendung der Cursorschleife zum Lesen temporärer Tabellen in gespeicherten MySQL-Prozeduren. Weitere Informationen zur MySQL-Cursorschleife zum Lesen temporärer Tabellen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Einführung in die Verwendung der Cursorschleife für gespeicherte Prozeduren in MySQL
  • Beispiel für das Verlassen und Fortsetzen der Cursorschleife in gespeicherten MySQL-Prozeduren
  • Verschachtelte Schleife einer gespeicherten MySQL-Prozedur mit Cursor-Beispielcode
  • Beispiel für die Verwendung des Cursors in einer gespeicherten MySQL-Prozedur
  • Dynamisches MySQL-Cursor-Lernen (MySQL-Cursor für gespeicherte Prozeduren)
  • Detaillierte Erklärung des Prinzips und der Verwendung des Cursors (DECLARE) in der gespeicherten MySQL-Prozedur
  • Detaillierte Erläuterung der gespeicherten Prozeduren, Cursor und Transaktionsbeispiele von MySQL
  • Beispiel für die Verwendung des Cursors in einer gespeicherten MySQL-Prozedur
  • Beispiele für die Verwendung von gespeicherten MySql-Prozeduren und Cursorn

<<:  Detaillierte Erklärung der Rolle und des Prinzips des Schlüssels in Vue

>>:  Verwenden Sie Docker, um den Kong-Clusterbetrieb aufzubauen

Artikel empfehlen

Vue ruft die PC-Kamera auf, um die Fotofunktion zu realisieren

In diesem Artikelbeispiel wird der spezifische Co...

18 erstaunliche Verbindungen zwischen Interaktionsdesign und Psychologie

Designer müssen Psychologie verstehen, indem sie ...

Beispielcode zur Verwendung der Elementkalenderkomponente in Vue

Schauen Sie sich zunächst das Wirkungsdiagramm an...

JavaScript zum Erzielen von Feuerwerkseffekten (objektorientiert)

In diesem Artikel wird der spezifische Code für J...

jQuery implementiert das Bouncing-Ball-Spiel

In diesem Artikel wird der spezifische Code von j...

Das Miniprogramm implementiert nativ das linksseitige Schubladenmenü

Inhaltsverzeichnis WXS-Antwortereignis Plan A Sei...

Einige Frontend-Grundlagen (HTML, CSS) aus der Praxis

1. Die Div-CSS-Maushandform ist Cursor:Zeiger; 2. ...

So schreiben Sie den Einführungsinhalt der Infoseite der Website

Alle Websites, ob offiziell, E-Commerce, soziale ...

Teilen Sie 20 hervorragende Beispiele für Webformular-Design

Sophie Hardach Kai von Clyde Quay 37 Ost Seifenkis...

Ein kurzes Verständnis der Unterschiede zwischen MySQL InnoDB und MyISAM

Vorwort MySQL unterstützt viele Arten von Tabelle...

JavaScript verwendet Canvas zum Zeichnen von Koordinaten und Linien

In diesem Artikel wird der spezifische Code zur V...