Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Letzter Datensatz wird zweimal ausgegeben. Warum?

Frage Entwicklung Datenbanken

Mitglied: Web-Spirits

Web-Spirits (Level 1) - Jetzt verbinden

10.07.2014 um 11:59 Uhr, 1121 Aufrufe, 1 Kommentar

Hallo,

Ich habe folgende Prozedur geschrieben:

01.
use personal; 
02.
 
03.
drop PROCEDURE if EXISTS p_gehalt; 
04.
 
05.
DELIMITER $$ 
06.
 
07.
CREATE PROCEDURE p_gehalt(va_maxAvgGehalt DECIMAL(10,2)) 
08.
p_start: BEGIN 
09.
  DECLARE va_loopDone BOOLEAN DEFAULT FALSE;	-- Loop Flag 
10.
  DECLARE va_loopCount INT DEFAULT 0;						-- Schleifen Zähler 
11.
  DECLARE va_avgGehalt DECIMAL(10,2);			-- Durchschnittsgehalt 
12.
  DECLARE va_name VARCHAR(50);					-- Mitarbeiter Nachname 
13.
  DECLARE va_vname VARCHAR(50);					-- Mitarbeiter Vorname 
14.
  DECLARE va_gehalt DECIMAL(10,2); 
15.
 
16.
  DECLARE c_gehaltItem CURSOR FOR  
17.
    SELECT name, vname, gehalt FROM mitarbeiter; 
18.
 
19.
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET va_loopDone = TRUE; 
20.
 
21.
  SELECT avg(gehalt) FROM mitarbeiter INTO va_avgGehalt; -- Durchschnittsgehalt ermitteln 
22.
 
23.
  OPEN c_gehaltItem; 
24.
 
25.
  l_fetch_daten:LOOP 
26.
    IF va_loopDone THEN 
27.
		CLOSE c_gehaltItem; 
28.
		LEAVE l_fetch_daten; 
29.
    END IF; 
30.
    FETCH c_gehaltItem INTO va_name, va_vname, va_gehalt; 
31.
	SET va_loopCount = va_loopCount +1; 
32.
    SELECT va_name, va_vname, va_gehalt, va_avgGehalt; 
33.
    /* IF (va_gehalt < va_avgGehalt) THEN 
34.
		SELECT va_name, va_vname, va_gehalt; 
35.
	END IF; */ 
36.
  END LOOP l_fetch_daten; 
37.
SELECT va_loopCount; 
38.
END p_start 
39.
$$ 
40.
 
41.
DELIMITER ; 
42.
 
43.
CALL p_gehalt(2030);
Jetzt wird mir der letzte Datensatz in der Tabelle zweimal ausgegeben und ich weiß nicht wo der herkommt.
Ich habe auch geprüft ob der Datensatz zweimal in der Tabelle ist. Er kommt nur einmal vor.

Kann mir das vielleicht jemand erklären?

Danke schon mal und Grüße aus dem Norden.
Mitglied: Jochem
11.07.2014 um 10:32 Uhr
Moin,

ich vermute mal, daß es um PHP geht, wenn nicht, vergiß den nachfolgenden Text.

Gemäß der Definition zu "declare continue"

01.
Ein CONTINUE-Handler lässt die Ausführung der aktuellen Routine nach der Ausführung der Handler-Anweisung weiterlaufen. Ein EXIT-Handler dagegen beendet die Ausführung für die zusammengesetzte BEGIN ... END-Anweisung, in der er deklariert ist. 
wird die Begin ... End-Anweisung noch einmal durchlaufen und findet so den doppelten Satz.

In Zeile 26 bis 29 schickst Du die Routine zwar aus der Loop l_fetch_daten raus, aber die Begin ... End-Anweisung ist immer noch aktiv, wird also noch einmal durchlaufen.

Zeile 37 müßte dann aber auch hinter Zeile 38 liegen.

Gruß J chem
Bitte warten ..
Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Windows Server
gelöst Letzte Anmeldung auf Terminalserver einsehen (2)

Frage von Bierkopf zum Thema Windows Server ...

PHP
gelöst MySQL Update eines Datensatz mit Variable (4)

Frage von Jens4ever zum Thema PHP ...

Microsoft Office
gelöst Automatisch entscheiden ob prozentual oder fest anzahl von Datensätze (7)

Frage von hugothemagpie zum Thema Microsoft Office ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Windows Server
Kennwort vergessen bei Hyper vserver 2012r (12)

Frage von jensgebken zum Thema Windows Server ...

Linux Desktop
Bildschirmauflösung unter Linux festlegen (12)

Frage von itebob zum Thema Linux Desktop ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Gebäude mit WLAN ausstatten (9)

Frage von udobec zum Thema LAN, WAN, Wireless ...