Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 1099 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
Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(38)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Festplatten, SSD, Raid
POS Hardware und alternativen zu Raid 1? (21)

Frage von Brotkasten zum Thema Festplatten, SSD, Raid ...

Viren und Trojaner
Verschlüsselungstrojaner simulieren (16)

Frage von AlbertMinrich zum Thema Viren und Trojaner ...

Rechtliche Fragen
Hotspot rechtssicher betreiben? (14)

Frage von xSiggix zum Thema Rechtliche Fragen ...

Server-Hardware
gelöst Empfehlung KVM over IP Switch (8)

Frage von Androxin zum Thema Server-Hardware ...