Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Bitte beim kopieren so lieb sein und soviele variabelnnamen und strings und was weis ich noch alles ändern! bitte aufpassen bei beispiel 3 und 6!!!
- --3 und 6 würd ich eher als schwer einstufen hab hier aber versucht meinen lösungsweg bestmöglich zu erklären.
- --bei fehlern in meinem code bitte bescheid sagen,... uU hab ich die angabe missverstanden oder es gibt eine bessere und/oder leichtere lösung. daher alles ohne gewähr.
- Set SERVEROUTPUT on; --NICHT VERGESSEN!!! muss einmalig nach anmelden aufgerufen werden damit dbms_output.put_line() funktioniert
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- --und HERE WE GO!!!
- -- 1. Schreiben Sie einen anonymen Block, welcher eine Variable „v_personID“ deklariert, diese mit dem höchsten Eintrag der personID
- -- aus der Tabelle person befüllt und ausgibt.
- DECLARE
- v_personID INT;
- BEGIN
- select max(personID) into v_personID from person;
- dbms_output.put_line('Höchster Eintrag von persID: ' || v_personID);
- END;
- / --gg ez
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- -- 2. Schreiben Sie einen anonymen Block, welcher das Verhältnis zwischen Flugpersonal und Bodenpersonal
- -- ausgibt (z.B.: “flugpersonal : bodenpersonal = 10:24”). Verwenden Sie dafür mindestens 2 verschiedene Select Statements.
- DECLARE
- v_flugPers INT;
- v_bodenPers INT;
- BEGIN
- select count(personID) into v_flugPers from flugpersonal;
- select count(personID) into v_bodenPers from bodenpersonal;
- dbms_output.put_line('flugpersonal : bodenpersonal = ' || v_flugPers || ':' || v_bodenPers);
- END;
- /
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- --3. Schreiben Sie eine Datenbankprozedur, welche die Daten eines Passagiers auf einem bestimmten Sitzplatz eines Fluges ausgibt.
- -- Deklarieren Sie dazu mindestens die beiden Variablen v_flugnummer und v_sitzplatz und weisen Sie diesen Werte zu.
- -- Ausgegeben werden sollen die Flugnummer, der Passagiername, sein Sitzplatz, seine Landeszugehörigkeit (sofern vorhanden),
- -- seine Reisepassnummer und das Gesamtgewicht seines Gepäcks. Ist der Platz noch frei, geben Sie 0 aus.
- -- Überlegen Sie sich wo und wie es zu Fehlerfällen kommen kann (z.B. mehrere Reisepassnummern).
- -- Überprüfen Sie auf diese Fehlerfälle und geben, wenn einer Eintritt, -1 aus. Verwenden Sie noch kein explizites Exception Handling!
- --NOTE: tricky! vorweg ein paar infos! für den output verwende ich chr(10) das is der 10. char im ascii und macht nix anderes als einen zeilenumbruch! also rein für formatierung.
- --der erste code hier gibt nur alles gefragte aus, sofern die datensätze auch vorhanden sind und keine fehler auftreten, ich hab mir dafür eine flugnummer rausgesucht die existiert
- --und einen sitzplatz auf dem tatsächlich ein passagier drauf sitzt! das alleine find ich schon komplex genug für das zusätzlich gefragte fehler handling (OHNE EXCEPTIONS -> fml[wär soviel einfacher mit])
- --schreib ich das ganze nochmal in einen separaten code mit daten.
- --aber hier einmal eine fast/beinahe lösung:
- CREATE or REPLACE
- PROCEDURE procPassAufSitzplatz
- IS
- v_flugnummer flug.flugnummer%type :='OS7511';
- v_sitzplatz VARCHAR2(10):='217B';
- v_bezeichnung land.bezeichnung%TYPE;
- v_reisepassnr reisepass.reisepassnr%type;
- v_vorname person.vorname%type;
- v_nachname person.nachname%type;
- v_gewicht gepaeck.gewicht%type;
- BEGIN
- --ich versuch mal das select statement zu erklären:
- --in pl/sql braucht ein select statement auch mmer ein into,.. sonst schreit er aber subselects brauchen keins!
- --ganz innen drin hol ich mir alles was ich brauch, summiere bei mehreren einträgen das giwicht und gruppier das ganze.
- -- ich kann leider innen drin alle werte noch nicht in variablen abspeichern. mag er nicht. muss ja auch erst die summe und das gruppieren abschliesen. also ich versteh ihn schon warum er nicht mag.
- --der summe gewicht geb ich einen alias sum_gew und diesen nutz ich dann im äußeren statement um mittels into diesen und andere werte in variablen zu speichern, der rest is glaub ich logisch
- select bezeichnung, reisepassnr, vorname, nachname, sum_gew
- into v_bezeichnung, v_reisepassnr, v_vorname, v_nachname, v_gewicht from (
- select flugnummer, bezeichnung, reisepassnr, vorname, nachname, sitzplatznummer, SUM(gewicht) as sum_gew from land join reisepass using(landid)
- join person using(personID) join passagierliste using (personID) join flug using (flugID) join gepaeck using (personID)
- group by flugnummer, bezeichnung, reisepassnr, vorname, nachname, sitzplatznummer)
- where flugnummer = v_flugnummer AND Sitzplatznummer = v_sitzplatz;
- dbms_output.put_line('-----------------------------------------' ||chr(10)); --just4fun um den konsolen output von den restlichen automatischen msg abzugrenzen chr(10) macht einen zeilenumbruch. kA obs da nicht eine bessere möglichkeit gibt. \n funktioniert nicht, hab ich probiert.
- dbms_output.put_line('Flugnummer: ' || v_flugnummer || chr(10) || --einfach alles zusammengestückelt und ausgegeben.
- 'Name: ' || v_vorname || ' ' || v_nachname || chr(10) ||
- 'Sitzplatz: ' || v_sitzplatz || chr(10) ||
- 'Landeszugehörigkeit: ' || v_bezeichnung || chr(10) ||
- 'Reisepassnr: ' || v_reisepassnr || chr(10) ||
- 'Gesammtgewicht des Gepäcks: ' || v_gewicht || 'kg');
- dbms_output.put_line('-----------------------------------------' ||chr(10));
- END;
- /
- exec procPassAufSitzplatz; --oben wurde die procedure nur erstellt,... ohne diese zeile sieht man nix!
- -------------------------------
- -------------------------------
- --ok. jetzt ein bisschen mehr ins detail! als erstes mittels dem folgenden statement seh ich das es für ganz unterschiedliche flüge die selbe reisepassnummer gibt.
- --warum? da ein und die selbe person auch mehrere flüge gebucht haben kann. hier ein statement womit ich das rauslesen kann:
- select distinct flugnummer, bezeichnung, reisepassnr, vorname, nachname, sitzplatznummer
- from land join reisepass using(landid)
- join person using(personID)
- join passagierliste using (personID)
- join flug using (flugID)
- join gepaeck using (personID);
- --jedoch sind ja die flugnummern eine andere! wie kann mir das jetzt genau schwierigkeiten bereiten?
- --in meiner methode (glaub ich) KAUM (also ich persönlich seh nicht wirklich ein problem) aber falls ich tatsächlich (obwohl ich nach flugnummer AND sitzplatznummer) filter dann trotzdem 2 datensätze zurückbekommen würd
- --was ich mir zwar nicht vorstellen kann, aber nur mal angenommen die selbe person mit der selben reisepassnummer bucht sich irgendwie 2 mal in mein system ein sogar auf den selben sitzplatz,
- -- (was wiederum durch foreign key constraints schonmal prizipiel nicht gehen sollte) dann könnts mir das progrmm crashen.
- --alle anderen eventualitäten sollt ich mit dem folgenden code abgecheckt haben:
- CREATE or REPLACE
- PROCEDURE procPassAufSitzplatz
- IS
- v_flugnummer flug.flugnummer%type :='AF3012';
- v_sitzplatz VARCHAR2(10):='18';
- v_bezeichnung land.bezeichnung%TYPE;
- v_reisepassnr reisepass.reisepassnr%type;
- v_vorname person.vorname%type;
- v_nachname person.nachname%type;
- v_gewicht gepaeck.gewicht%type;
- v_platzCount INT;
- v_fehler BOOLEAN := false;
- BEGIN
- select count(*) into v_platzCount from land join reisepass using(landid) --ich check hier eigentlich nur obs einen eintrag für die flugnummer UND einen sitzplatz gibt! wenn nicht gibts entweder niemanden auf dem sitzplatz oder es gibt den ganzen flug garnicht
- join person using(personID) join passagierliste using (personID) join flug using (flugID)
- where flugnummer = v_flugnummer AND Sitzplatznummer = v_sitzplatz;
- if v_platzCount = 0 then --naja da 0 bedeutet oben gibts mal keinen eintrag dazu, also is schon irgendwas mit der eingabe falsch vielleicht kein datensatz auf diesem sitzplatz aber auch möglich das die flugnummer falsch eingegeben wurde
- select count(*) into v_platzCount from land join reisepass using(landid) --hier check ich im detail ob es an der flugnummer gelegen hat, dass ich hier gelandet bin wenn ja hats einen fehler, wenn nein ist ganz einfach kein mensch auf den sitzplatz draufgebucht und der sitzplatz ist nich frei; hier werden jedoch nur die datensätze gezählt,.. die entscheidung folgt unten in der if
- join person using(personID) join passagierliste using (personID) join flug using (flugID)
- where flugnummer = v_flugnummer;
- if v_platzCount = 0 then --OJEOJE nicht der sitzplatz is das problem sondern die ganze flugnummer gibt schon garkeinen wert zurück also hab ich irgendeinen fehler,... ich setz bool v_fehler auf true damit wird am ende ganz einfach -1 ausgegeben
- v_fehler:=TRUE;
- else
- dbms_output.put_line('-----------------------------------------' ||chr(10));
- dbms_output.put_line('0 (Dieser Sitzplatz ist frei)' ||chr(10)); --wenn ich bis hierher komm, gab es keinen sitzplatz eintrag jedoch existiert der flug ergo ist der angegeben sitzplatz frei und 0 wird ausgegeben
- dbms_output.put_line('-----------------------------------------' ||chr(10));
- end if;
- else
- select count(*) into v_platzCount from land join reisepass using(landid) --zählen der ergebnise um zu sehen ob ich ein duplikat hab ACHTUNG: der join mit gepäck wurde rausgegeben, da bei mehreren gepäckstücken sofort auch mehrere einträge entstehen würden
- join person using(personID) join passagierliste using (personID) join flug using (flugID)
- where flugnummer = v_flugnummer AND Sitzplatznummer = v_sitzplatz;
- if v_platzCount=1 then --normalerweise sollte genau ein datensatz übrig bleiben,... und somit dürft es keine probleme im weiteren verlauf geben
- select bezeichnung, reisepassnr, vorname, nachname, sum_gew
- into v_bezeichnung, v_reisepassnr, v_vorname, v_nachname, v_gewicht from (
- select flugnummer, bezeichnung, reisepassnr, vorname, nachname, sitzplatznummer, SUM(gewicht) as sum_gew from land join reisepass using(landid)
- join person using(personID) join passagierliste using (personID) join flug using (flugID) join gepaeck using (personID)
- group by flugnummer, bezeichnung, reisepassnr, vorname, nachname, sitzplatznummer)
- where flugnummer = v_flugnummer AND Sitzplatznummer = v_sitzplatz;
- dbms_output.put_line('-----------------------------------------' ||chr(10));
- dbms_output.put_line('Flugnummer: ' || v_flugnummer || chr(10) ||
- 'Name: ' || v_vorname || ' ' || v_nachname || chr(10) ||
- 'Sitzplatz: ' || v_sitzplatz || chr(10) ||
- 'Landeszugehörigkeit: ' || v_bezeichnung || chr(10) ||
- 'Reisepassnr: ' || v_reisepassnr || chr(10) ||
- 'Gesammtgewicht des Gepäcks: ' || v_gewicht || 'kg');
- dbms_output.put_line('-----------------------------------------' ||chr(10));
- else
- v_fehler:=TRUE;
- end if;
- end if;
- if v_fehler then --ich komm hier nur rein wenn irgendwo ein fehler ausfindig gemacht wurde und die boolsche variable auf true gesetzt wurde. Um diese variable auf true zu setzten gibt es unzählige möglichkeiten. der fantasie sind keine grenzen gesetzt! ich kann alle eventualitäten abfragen die mir nur irgendwie in den sinn kommen.
- dbms_output.put_line('-----------------------------------------' ||chr(10));
- dbms_output.put_line('-1 (FEHLER)' ||chr(10));
- dbms_output.put_line('-----------------------------------------' ||chr(10));
- end if;
- END;
- /
- exec procPassAufSitzplatz;
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- --4. Schreiben Sie eine Datenbankfunktion, welche die Anzahl der verschiedenen Ortsnamen zurück gibt.
- -- Sollten keine Namen verfügbar sein, dann soll -1 zurück gegeben werden.
- CREATE or REPLACE
- FUNCTION funcOrtsnamen
- RETURN NUMBER
- IS
- v_anzahl NUMBER;
- BEGIN
- select count(plz) into v_anzahl from ort;
- if v_anzahl = 0 THEN
- return -1;
- else
- return v_anzahl;
- end if;
- END;
- /
- SELECT funcOrtsnamen as "Anzahl Ortsnamen" from DUAL;
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- --5. Schreiben Sie eine Datenbankprozedur, welche alle Dienstränge (dienstrangID, kbz und bezeichnung) für die IDs von 100 bis 110 ausschreibt.
- -- Sollte eine dienstrangID in diesem Bereich nicht vorhanden sein, dann schreiben Sie stattdessen “kein Dienstrang verfügbar für ID: xxx” aus.
- CREATE or REPLACE
- PROCEDURE procDienst
- IS
- v_kbz dienstrang.kbz%TYPE;
- v_bezeichnung dienstrang.bezeichnung%TYPE;
- v_test int;
- BEGIN
- FOR i IN 100..110 --i ist meine zählvariable aber auch die dienstrangID
- LOOP
- select count(dienstrangID) into v_test from dienstrang WHERE dienstrangID = i; --hier schau ich nur ob das select statement überhaubt einen eintrag rausgibt wenn nicht dann is v_test = 0
- if(v_test = 1) then --wenn ich doch einen wert finde kann ich nun die folgenden select statement anwenden ohne dass das programm crashed
- select kbz into v_kbz from dienstrang WHERE dienstrangID = i; --das if drumherum bräucht ich nicht, sofern daten vorhanden wären,... aber CRAAASH wenn er keine daten findet!!!
- select bezeichnung into v_bezeichnung from dienstrang WHERE dienstrangID = i; --same here
- dbms_output.put_line('DienstrangID: ' || i || ', | KBZ: ' || v_kbz || ', | BEZEICHNUNG: ' || v_bezeichnung);
- else
- dbms_output.put_line('kein Dienstrang verfügbar für ID: ' || i);
- end if;
- END LOOP;
- END;
- /
- exec procDienst;
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- --6. Schreiben Sie eine Datenbankfunktion, welche einen Passagier auf einem Flug cancelt. Zu diesem Zweck deklarieren Sie einige Variablen,
- -- welche z.B. den Familien- und den Vornamen halten, sowie die Flugnummer. Löschen Sie tatsächlich den Passagier aus der Passagierliste
- -- heraus und geben Sie als Rückgabewert der Funktion die Stornierungskosten aus. Diese berechnen sich nach folgender
- -- Formel: Gebühr = Flugdauer (in Stunden) * 50 Sollte es zu Fehlermeldungen kommen, überlegen Sie, ob man
- -- (ohne explizites Exception Handling) etwas dagegen machen kann.
- --NOTE: nachfolgende funktion funktioniert nur wenn es keine fk constraints in richtung child (gepäck) gibt.
- --das ist zB. der fall wenn ich einen eigenen datensatz nur in passagierliste einfüg. also zuerst:
- insert into passagierliste values (16,5, '1XXX'); -- <--WICHTIG die Funktion funktioniert nur wenn dieses insert zuerst ausgeführt wird!!!!!!
- --...reinkopieren und ausführen. jetzt gibts einen datensatz der auf die person maier herbert und den flug AB4741 verweist und zusätzlich sitzt der junge
- -- auf sitzplatz 1XXX zum rumtesten und selber datensätze kreieren muss man eine personid und eine flugid finden die schon existieren ABER beide zusammen
- --in der passagierliste nicht vorkommen. nützliche select statements dazu sind:
- select flugid, personid, dauer, vorname, nachname, flugnummer, sitzplatznummer from passagierliste join person using (personid) join flug using(flugid);
- select * from passagierliste join person using (personid);
- select * from passagierliste ;
- --und um diesen direkt wieder rauszulöschen logischerweise
- delete from passagierliste where personID = 5 AND FlugID = 16;
- --jedoch machen wir das rauslöschen sowieso in der funktion unten!
- CREATE or REPLACE
- FUNCTION funcCancelPassagier
- RETURN NUMBER
- IS
- v_flugnr flug.flugnummer%type :='AB4741'; --wenn ich den datensatz oben anlege dann sind das die 3 werte nach denen ich suchen muss
- v_nachname person.nachname%type:='Maier';
- v_vorname person.vorname%type:='Herbert';
- v_personID person.personID%type;
- v_flugID flug.flugID%type;
- v_gebuehr number;
- v_flugdauer flug.dauer%type;
- v_fehler BOOLEAN := false; --wenn nie ein fehler passiert bleibt diese variable immer false und gibt erlaubt am ende das delete statement und eine berechnung des rückgabe werts,.. sollte irgendwo ein fehler auftreten dann wird die variable auf true gesetzt und das delete garnicht ausgeführ und als rückgabe wert nur -1 angegeben
- v_errCount int; --die variable verwend ich ein paar mal, hauptsächlich um abzuzählen, wieviele einträge ein select statement ausgeben würd,... in den meisten fällen (aufgrund dieser select statements) is der wert entweder 0 oder 1
- BEGIN
- select count(personID) into v_errCount from person where nachname = v_nachname and vorname = v_vorname;
- if v_errCount = 1 then
- select personID into v_personID from person where nachname = v_nachname and vorname = v_vorname; --dieses statement ohne if würd auch schon funktionieren sofern denn der name vorhanden is. wenn nicht crashed das programm daher die if rundherum. ich mach das bei allen folgenden select statements auch
- else
- v_fehler := true; --oO vermutlich gibts entweder den vornamen oder den nachnamen nicht oder alles is im arsch dann kommt er hier rein,.. und die bool variable is nun true,.. kein zurück mehr,.. das ergebnis wird jetzt -1 sein :'(
- end if;
- select count(flugID) into v_errCount from flug where flugnummer = v_flugnr;--wie gerade oben! dieses select statement mit dem count is fast genau das selbe wie 2 zeilen darunter nur das es keine fehler zurückgibt, wenn er nix findet
- if v_errCount = 1 then
- select flugID into v_flugID from flug where flugnummer = v_flugnr; --specher die flugid in die variable v_flugID
- else
- v_fehler := true;
- end if;
- select count(dauer) into v_errCount from flug join passagierliste using (flugid) where personid=v_personID and flugid=v_flugID;
- if v_errCount = 1 then
- select dauer into v_flugdauer from flug join passagierliste using (flugid) where personid = v_personID and flugid = v_flugID; --speicher die dauer in v_flugdauer
- else
- v_fehler := true;
- end if;
- if(v_fehler = false) then --nur wenn alle 3 select statements von oben auch einen wert in die 3 variablen (v_flugdauer, v_flugID, v_personID) reingeschrieben haben is die bool noch immer auf false und wir können fröhlich und entspannt DELETEn,... ach und wir dürfen auch unsere gebür ausrechnen
- delete from passagierliste where personID = v_personID AND FlugID = v_flugID;
- v_gebuehr := v_flugdauer * 50; --die ultimative universalformel um stornierungsgebüren zu berechnen!!!
- else
- v_gebuehr := -1; --alles im arsch,... gib -1 zurück
- end if;
- return v_gebuehr;
- END;
- /
- begin
- DBMS_OUTPUT.PUT_LINE('Stornierungskosten: ' || funcCancelPassagier); --ACHTUNG! die andere möglichkeit eine funktion aufzurufen mit: SELECT functionName from DUAL;
- --funktioniert hier nicht!! da diese nur funktioniert, sofern in der funktion selber NUR select statements und
- --keine alter,update, delete, select-update anweisungen aufgerufen werden.
- end;
- /
- -------------------------------
- -------------------------------
- --Und hier nun die Lösung die auch etwaige foreign key constraints bezüglich gepäck abhandeln sollte.
- --Ich hab mir dazu die Sabine aus der datenbank rausgesucht, also ein existierender Eintrag. diese Frau hat auch gepäck aufgegeben.
- --Wenn ich versuche würd mit der obigen funktion die sabine zu löschen gibts einen fehler, da sie gepäck hat und daher eine fk constraint -> daher muss ich hier auch ihr gepäck löschen
- --wenn ich das ganze ausführe is der datensatz natürlich löscht und weg, genauso wie das gepäck,...
- --um den ursprungszustand wieder herzustellen hier die 2 insert statements um sie mit den original daten wieder reinzufügen plus
- --die select statements um zu schaun obs den auch geklappt hat:
- insert into passagierliste values (1,19, '10B'); --nur ausführen sofern man diesen datensatz schon gelöscht hat!!!
- insert into gepaeck values(7,19,1,19.5);
- select * from passagierliste where personID = 19 AND FlugID = 1;
- select * from gepaeck where personID = 19 AND FlugID = 1;
- --und here we goooo...
- CREATE or REPLACE
- FUNCTION funcCancelPassagier
- RETURN NUMBER --int würd eigentlich auch schon ausreichen
- IS
- v_flugnr flug.flugnummer%type :='OS1467'; --diese daten gabs schon in der datebank und es gibt auch einen constraint da gepäck vorhanden
- v_nachname person.nachname%type:='Kroll';
- v_vorname person.vorname%type:='Sabine';
- v_personID person.personID%type;
- v_flugID flug.flugID%type;
- v_gebuehr number;
- v_flugdauer flug.dauer%type;
- v_fehler BOOLEAN := false;
- v_errCount int;
- BEGIN
- select count(personID) into v_errCount from person where nachname = v_nachname and vorname = v_vorname;
- if v_errCount = 1 then
- select personID into v_personID from person where nachname = v_nachname and vorname = v_vorname;
- else
- v_fehler := true;
- end if;
- select count(flugID) into v_errCount from flug where flugnummer = v_flugnr;
- if v_errCount = 1 then
- select flugID into v_flugID from flug where flugnummer = v_flugnr;
- else
- v_fehler := true;
- end if;
- select count(dauer) into v_errCount from flug join passagierliste using (flugid) where personid=v_personID and flugid=v_flugID;
- if v_errCount = 1 then
- select dauer into v_flugdauer from flug join passagierliste using (flugid) where personid = v_personID and flugid = v_flugID;
- else
- v_fehler := true;
- end if;
- if(v_fehler = false) then
- select count(personID) into v_errCount from gepaeck where personID = v_personID AND FlugID = v_flugID; --HIER is der UNTERSCHIED zu oben!!!
- if v_errCount > 0 then --sofern bisher kein fehler aufgetreten is soll er checken obs ein gepäck gibt
- delete from gepaeck where personID = v_personID AND FlugID = v_flugID; --wenn ja dann sollte dann speichert er mir in die variable v_errCount einen wert (wahrscheinlich 1)
- end if; --rein. und in dem fall führt er noch ein delete statement aus, das das gepäck löscht, bevor die liebe Sabine
- --aus der passagierliste eleminiert wird. somit funktioniert dann auch das nächste delete statement ohne probleme,.. hoff ich
- delete from passagierliste where personID = v_personID AND FlugID = v_flugID;
- v_gebuehr := v_flugdauer * 50;
- else
- v_gebuehr := -1;
- end if;
- return v_gebuehr;
- END;
- /
- begin
- DBMS_OUTPUT.PUT_LINE('Stornierungskosten: ' || funcCancelPassagier || ' GELD'); --kA ob € oder was weis ich! plus hier könnte man noch eine kleine if einbauen, die checkt ob eine -1 rauskommt und in dem fall eine fehlermeldung anstelle der stornierungskosten ausgibt... mag ich aber nicht!
- end;
- /
- --thats it! gl hf <3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement