Heim >php教程 >PHP开发 >So durchlaufen Sie Schleifendaten mit dem SQL-Cursor

So durchlaufen Sie Schleifendaten mit dem SQL-Cursor

高洛峰
高洛峰Original
2016-12-14 11:56:301338Durchsuche

Wenn Sie eine Durchlaufschleifenoperation für die Daten durchführen, können Sie dies über SQL-Cursor erreichen. Im Folgenden finden Sie eine detaillierte Einführung in diese Methode. Ich hoffe, dass sie Ihnen beim Erlernen der SQL-Datenbank hilfreich sein wird.

Der Vorteil von SQL-Cursoren besteht darin, dass sie problemlos Daten aus einer Ergebnismenge durchlaufen und Operationen ausführen können.
1. Der Cursor ermöglicht es der Anwendung, dieselben oder unterschiedliche Operationen für jede Zeile in der von der Abfrageanweisung zurückgegebenen Ergebnismenge auszuführen, anstatt dieselbe Operation für die gesamte Ergebnismenge auf einmal auszuführen . Es bietet auch die Möglichkeit, Daten in der Tabelle basierend auf dem Speicherort zu löschen oder zu aktualisieren. 3. Cursor verbinden das sammlungsorientierte Datenbankverwaltungssystem mit der zeilenorientierten Programmierung und ermöglichen so die Kommunikation zwischen den beiden Datenverarbeitungsmethoden .
Cursor haben jedoch auch Nachteile – Komplexität und Ineffizienz, die die größten Nachteile von Cursorn darstellen und auch die Hauptgründe dafür sind, dass Cursor bei der Verwendung gespeicherter Prozeduren nicht berücksichtigt werden.

Das Folgende ist eine Anwendung eines Cursorbeispiels in der tatsächlichen Arbeit. Der Cursor wird verwendet, um einen Spaltenwert der Daten in Tabelle A in eine Spalte in Tabelle B zu kopieren. Die beiden Tabellen haben das gleiche UID-Feld. Die Bedingung ist Daten mit derselben UID kopieren.

deklariere @level varchar(100)

deklariere @uid varchar(100)

deklariere den aktuellen Cursor – Definiere einen Cursor
schreibgeschützt
for select egg_code.user_id,egg_prize_level
from egg_code inner join egg_prize on egg_prize.user_id=egg_code.user_id – Geben Sie den Cursor für den erhaltenen Datensatz an

open cur – Öffnen Sie den Cursor

fetch next from cur into @uid,@level – Füge die Spaltendaten der Abrufoperation in lokale Variablen ein

while(@@fetch_status=0) – Gibt den Status des letzten Cursors zurück, der von der FETCH-Anweisung ausgeführt wurde, nicht alle aktuell verbundenen Der Status des geöffneten Cursors.

beginnen

--print 'Level:'+@level+'-------------Benutzer-ID:'+@uid


Egg_code-Satz aktualisieren Prize_level=@level where user_id=@uid--Vorgang ausführen

--Nächste Informationen vorrücken

Nächstes von cur in @uid abrufen,@level

Ende
cur schließen- -Cursor schließen
Zuweisung von Cur aufheben – Cursor löschen
Gehe

Die Reihenfolge der Verwendung des Cursors: Cursor deklarieren, Cursor öffnen, Daten lesen, Cursor schließen, Cursor löschen.

Seien Sie bei der Verwendung von @@FETCH_STATUS vorsichtig, da @@FETCH_STATUS global für alle Cursor einer Verbindung ist. Nach der Ausführung einer FETCH-Anweisung muss @@FETCH_STATUS getestet werden, bevor eine weitere FETCH-Anweisung auf einem anderen Cursor ausgeführt wird. Der Wert von @@FETCH_STATUS wird nicht definiert, bevor ein Abrufvorgang für diese Verbindung ausgeführt wird.

Zum Beispiel führt der Benutzer eine FETCH-Anweisung von einem Cursor aus und ruft dann eine gespeicherte Prozedur auf, die die Ergebnisse eines anderen Cursors öffnet und verarbeitet. Wenn die Kontrolle von einer aufgerufenen gespeicherten Prozedur zurückgegeben wird, spiegelt @@FETCH_STATUS das Ergebnis der letzten in der gespeicherten Prozedur ausgeführten FETCH-Anweisung wider, nicht das Ergebnis der FETCH-Anweisung vor dem Aufruf der gespeicherten Prozedur.
Der obige Cursor wurde von Quanzhou SEO während eines Website-Golden-Egg-Smashing-Events verwendet. Während des Nutzungsprozesses wurden Teile der Daten in den beiden Tabellen später im Programm geändert, was dazu führte, dass einige Daten nicht synchronisiert werden konnten. Dies führt dazu, dass die relevanten Daten nicht in der Tabelle gefunden werden können. Ich habe versucht, eine solche Synchronisationsfunktion mit einfachen SQL-Anweisungen zu erreichen, aber das war nie möglich, sodass ich nur einen Cursor verwenden kann um es zu erreichen.

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