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, 1117 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
PHP soll Datensätze in der Datenbank überprüfen (2)

Frage von Yanmai zum Thema PHP ...

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

Frage von Jens4ever zum Thema PHP ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

(3)

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Eine Netzwerkdose im Wechsel für zwei unterschiedliche Netze (12)

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

Netzwerke
Mobile Einwahl IPSec VPN von iPhone iPad T-Mobile zur Pfsense (11)

Frage von Spitzbube zum Thema Netzwerke ...

Voice over IP
SNOM D765 an LancomR883VAW (10)

Frage von MS6800 zum Thema Voice over IP ...

Windows Netzwerk
Ordner-Freigabe außerhalb der Domäne (9)

Frage von Remsboys zum Thema Windows Netzwerk ...