Heim  >  Artikel  >  php教程  >  SQL-Cursor Ein einfaches Beispiel

SQL-Cursor Ein einfaches Beispiel

高洛峰
高洛峰Original
2016-12-14 11:28:161377Durchsuche

1. Die Rolle des Cursors:

Beim Auswählen wird ein Ergebnissatz zurückgegeben. Wenn Sie während des Rückgabevorgangs des Ergebnissatzes eine Datenzeile lesen müssen. Diese Datenzeile muss verarbeitet werden, z. B. die Rückgabe einer Abfrageergebnismenge basierend auf den gelesenen Daten als Abfragebedingungen usw. Die Anwendung muss einen Cursor verwenden.

Mit Cursorn können Benutzer die nächste Zeile, vorherige Zeile, erste Zeile oder letzte Zeile abfragen und diese gelesenen Zeilen verarbeiten.

2. Cursor-Beispiel

FUNKTION ERSTELLEN GetMRPlnFullBom – Erstellen Sie eine Funktion, um jede Zeile im Dokument basierend auf dem Dokumentschlüssel abzufragen und die Daten in jeder Zeile zu verarbeiten.​​​​

(

DocEntry int,

LineNum int,

LineNumLevel nvarchar(100),

ItmID nvarchar (20),

ItmName nvarchar(100),

LineType char(1),

Qty numeric(19,9),

BomLevel int,

ParentEntry int,

ParentItmID nvarchar(20),

TopEntry int,

TopItmID nvarchar(20),

BaseEntry int ,

BaseLineNum int ,

BaseType int

)

AS

BEGIN

Declare @Itm ID varchar(50) , @ Qty int ,@LineNum int ,@ObjType int --Deklarieren Sie lokale Variablen

--Deklarieren Sie einen Cursor, @ kann nicht vor XXX hinzugefügt werden, wie zum Beispiel der folgenden MRPlnA_ItmID, das Format ist DECLARE XXX CURSOR FOR

DECLARE MRPlnA_ItmID CURSOR FOR

SELECT ItmID , Qty ,LineNum , ObjType FROM MRPlnA Where DocEntry = @DocEntry – Die Anweisung muss zwischen DECLARE XXX CURSOR FOR und OPEN XXX stehen.

Open MRPlnA_ItmID --Öffnen Sie den Cursor

FETCH NEXT FROM MRPlnA_ItmID INTO @ItmID , @Qty ,@LineNum , @ObjType --FETCH NEXT FROM XXX INTO ... Aktualisieren Sie den Cursor-Spezifikationsdatensatz und wrap und speichern Sie die ausgewählten Daten in temporären Variablen. Das FETCH-Format umfasst neben NEXT auch PRIOR, FRIST und LAST. Dies sind die vorherige Zeile, die erste Zeile und die letzte Zeile. ​

WHILE @@FETCH_STATUS = 0 --@@FETCH_STATUS globale Variable, wird verwendet, um den letzten Status von FETCH abzufragen und die Schleife zu steuern. Er ist 0, wenn der Lesevorgang abgeschlossen ist, -1, wenn der Lesevorgang fehlschlägt, und -2, wenn der Datensatz gelöscht wird.

BEGIN

Einfügen in @TAB

Select DocEntry,LineNum,LineNumLevel,ItmID,ItmName,LineType,Qty*@Qty,BomLevel,ParentEntry,

ParentItmID,TopEntry,TopItmID , @DocEntry SourceEntry ,@LineNum BaseLineNum ,@ObjType BaseType  

From GetBomFullItems(@ItmID, 'V 1.0', GetDate()) TD --GetBomFULLItmes ist eine weitere Abfragefunktion. ​

FETCH NEXT FROM MRPlnA_ItmID INTO @ItmID , @Qty ,@LineNum , @ObjType – Select bewegt sich zur nächsten Zeile.

ENDE

CLOSE MRPlnA_ItmID – Cursor schließen

DEALLOCATE MRPlnA_ItmID – Cursor loslassen

RETURN

ENDE

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