Das Fetch holt die mit Select * from Tabelle gewünschten Datensätze heraus, ein sogenannter 'Cursor' zeigt jeweils auf den akutellen Datensatz. Wird ein Fetch abgesetzt kommt dieser Datensatz in die Datensatzvariablenfelder hinein. Zusätzlich wird der Cursor auf den nächsten Datensatz gestellt. Der Cursor ist also ein Datensatzzeiger. Ist die erste while Schleife erschöpft (keine weiteren Datensätze mehr vorhanden), ist es die zweite logischerweise auch, falls kein neuerlicher Select Befehl abgesetzt wird. Oder eben ein Seek. Bei beiden Befehlen bzw. im Zuge beider Befehle wird auch jeweils der Cursor auf den ersten passenden Datensatz gesetzt. Je nachdem ob über einen Index zugegriffen wird, sortiert wird, bzw. mittels 'WHERE' Bedingung eine Filter-Einschränkung angewendet wird, entscheidet sich, welcher Datensatz der erste ist und welche Datensätze qualifiziert sind. Der Datensatz, der als erster 'matcht', steht dann beim ersten Fetch-Aufruf bereit. Das ganze Schleifenspiel geht so lange bis der Cursor auf keinen qualifizierenden Datensatz gestellt werden kann und die while Bedingung wird zu FALSE. Deswegen also wenn eine weitere - SEPERATE - while Schleife notwendig ist, muß auch ein Select davor gemacht werden. Ist eigentlich logisch, denn ein Fetch ist ja kein Select.
mfg Kikakater
|