MySQL Procedure Problem mit "set-Zuweisung"

infinityfan

Neuer Benutzer
Beiträge
1
Ersteinmal Hallo miteinander. Ich hab grad n ziemliches Problem mit einer SQL Procedure.... Zum Hintergrund: N Kollege und ich haben uns entschlossen die Institution an der wir studieren in einer Datenbank abzubilden und ne kleine Stundenplan-Generierung (Frontend) zu erstellen. Das Einfügen und Anpassen von Kursen wird über Procedures geregelt.
Nun hänge ich aber beim Insert fest. Der Variable "varLektionsnummer" sollte per set varLektionsnummer = ("SQL-Query"); ein int-Wert zugewisen werden, jedoch weisst die Variable immer den Wert "null" auf.
Wenn ich den select-Befehl einzeln ausführe kriege ich eine einzige Angabe zurück, genau wie gewünscht. Weise ich "varLektionsnummer" eine Zahl zu, z.B. ('9'); wird diese zugewiesen und in die DB geschrieben.

Jetzt meine Frage: Woran könnte das liegen? Eine Zuweisung ist ja so wies aussieht möglich. Schonmal vielen Dank für eure Antworten.

Code:
BEGIN
 
declare varKlasse int;
declare varKlassengroesse int;
declare varFach int;
declare varPerson int;
declare varFunktion int;
declare varFachDoz int;
declare varZimmer int;
declare varZimmertyp int;
declare varZimmergroesse int;
declare varDatum int;
declare varLektionsnummer int;
declare varZimmerBesetzt int;
declare varBelegung int;
declare varDozentBesetzt int;
declare varKlasseBesetzt int;
declare varPersonenschnittstelle int;
declare varUseZimmertyp int;
 
 
set varKlasse = (select ID from klasse where Bezeichnung = KlasseIN);
set varKlassengroesse = (select Klassengrösse from klasse where ID = varKlasse);
set varPerson = (select ID from person where name = DozentNameIN and vorname = DozentVornameIN);
set varFunktion = (select Abteilung_ID_fk from Personenschnittstelle where Abteilung_ID_fk = 1 and Person_ID_fk = varPerson);
set varFach = (select ID from Fach where FachIN = Bezeichnung);
set varFachDoz = (select Fach_ID_fk from Personenschnittstelle where Fach_ID_fk = varfach and Person_ID_fk = varPerson);
set varZimmer = (select ID from zimmer where Zimmernummer = ZimmerIN);
set varZimmertyp  = (select Zimmertyp_ID_fk from zimmer where Zimmernummer = ZimmerIN);
set varZimmergroesse  = (select Kapazitaet from zimmer where Zimmernummer = ZimmerIN);
set varDatum = (select Datum from Belegung where Datum = DatumIN and Unterrichtszeit_Lektionsnummer_fk = LektionsnummerIN and Zimmer_ID_fk_bel = varZimmer);
 
set varLektionsnummer = (select Distinct Unterrichtszeit_Lektionsnummer_fk from Belegung where Datum = DatumIN and Unterrichtszeit_Lektionsnummer_fk = LektionsnummerIN and Zimmer_ID_fk_bel = varZimmer); -- Zuweisung funktoniert NICHT
set varLektionsnummer = ('9'); -- Zuweisung funktioniert einwandfrei.
 
set varZimmerBesetzt = (select Zimmer_ID_fk_bel from Belegung where Datum = DatumIN and Unterrichtszeit_Lektionsnummer_fk = LektionsnummerIN and Zimmer_ID_fk_bel = varZimmer);
set varPersonenschnittstelle = (select Distinct Personenschnittstelle_ID_fk from Belegung bel INNER JOIN Personenschnittstelle ps ON bel.Personenschnittstelle_ID_fk = ps.ID where Person_ID_fk = varPerson);
 
 
 
 
 
-- ‹berpr¸fung, ob Klasse vorhanden.
IF varKlasse is null then
Signal SQLSTATE '45000'
set MESSAGE_TEXT = 'Die Klasse ist nicht vorhanden';
END IF;
 
 
-- ‹berpr¸fen, ob eine Person vorhanden ist.
IF varPerson is null then
Signal SQLSTATE '45002'
set MESSAGE_TEXT = 'Die Person ist nicht vorhanden';
END IF;
 
 
-- ‹berpr¸fen, ob eine bestimmte Person auch Dozent ist.
IF varFunktion is null then
Signal SQLSTATE '45003'
set MESSAGE_TEXT = 'Die Person ist vorhanden aber kein Dozent';
END IF;
 
 
-- ‹berpr¸fen, ob ein Dozent auch ein Fach geben kann.
IF varFachDoz is null then
Signal SQLSTATE '45004'
set MESSAGE_TEXT = 'Die Person ist vorhanden und Dozent aber nich f¸r dieses Fach';
END IF;
 
 
-- ‹berpr¸fen, ob ein Zimmer vorhanden ist.
IF varZimmer is null then
Signal SQLSTATE '45005'
set MESSAGE_TEXT = 'Das Zimmer existiert nicht';
END IF;
 
 
-- ‹berpr¸fen, ob ein Zimmer die gew¸nschten Ger‰te hat (z.B.:PC).
IF varZimmertyp not like varZimmerBesetzt then
Signal SQLSTATE '45006'
set MESSAGE_TEXT = 'Der Unterricht zum gew¸nschten Fach kann nicht im gew¸nschten Zimmer durchgef¸hrt werden, da die Ausr¸stung nicht stimmt.';
END IF;
 
 
-- ‹berpr¸fen, ob die Zimmergrˆsse passend ist.
If varZimmergroesse < varklassengroesse then
Signal SQLSTATE '45007'
set MESSAGE_TEXT = 'Die Zimmergroesse ist unpassend';
END IF;
 
 
-- Ueberpruefen, ob ein Zimmer besetzt ist, zu einer gewissen Zeit.
set varBelegung = (select Belegungsnummer from Belegung where Datum = DatumIN and Zimmer_ID_fk_bel = ZimmerIN and Unterrichtszeit_Lektionsnummer_fk = LektionsnummerIN);
 
IF varBelegung is not null then
Signal SQLSTATE '45008'
set MESSAGE_TEXT = 'Das gewuenschte Zimmer ist innerhalb der gewuenschten Zeit schon besetzt';
END IF;
 
 
 
 
 
-- Ueberpruefen, ob ein Dozent besetzt is.
set varDozentBesetzt = (select count(*) from Belegung bel INNER JOIN Personenschnittstelle ps ON bel.Personenschnittstelle_ID_fk = ps.ID INNER JOIN Person p ON ps.Person_ID_fk = p.ID where bel.Datum = DatumIN and Unterrichtszeit_Lektionsnummer_fk = LektionsnummerIN and varperson = Person_ID_fk);
 
IF varDozentBesetzt > 0 then
Signal SQLSTATE '45009'
set MESSAGE_TEXT = 'Der gewuenschte Dozent ist leider besetzt';
END IF;
 
 
 
 
 
-- Ueberpruefen, ob eine Klasse bereits in einer gewissen Zeit Unterricht hat.
set varKlasseBesetzt = (select count(*) from Belegung bel INNER JOIN Personenschnittstelle ps ON bel.Personenschnittstelle_ID_fk = ps.ID INNER JOIN Klasse k ON ps.Klasse_ID_fk = k.ID where Datum = DatumIN and Unterrichtszeit_Lektionsnummer_fk = LektionsnummerIN and varklasse = Klasse_ID_fk_bel);
 
IF varKlasseBesetzt > 0 then
Signal SQLSTATE '45009'
set MESSAGE_TEXT = 'Die Klasse hat bereits schon Unterricht in diesem Zeitraum';
END IF;
 
 
-- Stundenplan buchen Teil1.
insert into Belegung  (Klasse_ID_fk_bel, Unterrichtszeit_Lektionsnummer_fk, Fach_ID_fk_bel, Datum, Zimmer_ID_fk_bel, Personenschnittstelle_ID_fk)
values (varKlasse, varLektionsnummer, varFach, DatumIN, varZimmer, varPersonenschnittstelle);
Signal SQLSTATE '45010'
set MESSAGE_TEXT = 'Der Unterricht wurde erfolgreich gebucht :)';
 
 
 
-- Stundenplan buchen Teil2.
 
-- insert into Personenschnittstelle (Person_ID_fk)
 
--values (varPerson);
 
--Signal SQLSTATE '45010'
 
--set MESSAGE_TEXT = 'Der Unterricht wurde erfolgreich gebucht_Teil2';
 
 
END
 
Werbung:
Können da eventuell mehrere Ergebnisse in der Unterabfrage zurück gegeben werden?
Handelt es sich bei Unterrichtszeit_Lektionsnummer_fk um eine Spalte vom Datentyp INT?
 
Zurück
Oben