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, 1092 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
Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(4)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Heiß diskutierte Inhalte
Exchange Server
Exchange 2016 Standard Server 2012 R2 Hetzner Mail (41)

Frage von Datsspeed zum Thema Exchange Server ...

Windows 7
gelöst Lokales Adminprofil defekt (25)

Frage von Yannosch zum Thema Windows 7 ...

LAN, WAN, Wireless
gelöst Statische Routen mit ISC-DHCP Server für Android Devices (20)

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