Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Grundkurs 2: Aufgaben und Lösungen

Lösung zu Beispiel 6 mit Oracle

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Für die Lösung von Beispiel 6 benötigen Sie in Oracle eine Sequenz. Wie Sie das umsetzen, erklärt Ihnen Klemens Konopasek in diesem Film.

Transkript

In diesem Video zeige ich Ihnen die Lösung für das sechste Beispiel zu DML INSERT mit Oracle. Wir sehen hier mit der Anweisung "INSERT INTO wawi.bestellungen" wird eine neue Bestellung eingefügt. Der Bestellstatus und das Bestelldatum werden automatisch über einen Default-Wert festgelegt. Deshalb ist es ausreichend, Bestellnummer, Lieferant und Bearbeiter zu ergänzen. Da die Bestellnummer automatisch vergeben werden soll, haben wir bei Oracle dafür eine Sequenz verwendet. Eine Sequenz ist ein Nummernspender, der uns einen laufenden Wert liefert. Die Sequenz trägt hier den Namen "wawi.", das ist das Schema, "best_nr". Mit der Methode "nextval" rufen wir den nächsten Wert aus dieser Sequenz ab und geben hier beim INSERT einer Bestellung die Nummer mit. Ich führe also diese Anweisung aus und habe nun eine Zeile eingefügt. Jetzt möchten wir natürlich wissen, welche Bestellnummer vergeben worden ist. Wir könnten jetzt natürlich nachsehen, was ist die höchste Nummer in der Tabelle, aber in einem Multi-User-Environment ist das natürlich gefährlich, weil was passiert wenn fast zeitgleich kurz nach uns jemand anderes auch eine neue Bestellnummer erfasst hat. Deshalb kontrollieren wir das über folgende Anweisung, und zwar kann mit der Methode oder der Eigenschaft "currval" wie "current value", aktueller Wert, für eine Sequenz der Wert ausgelesen werden. Wenn wir aus keiner Tabelle sondern generell einen Wert auslesen, müssen wir bei Oracle "FROM dual" verwenden. Damit wird der zuletzt vergeben Wert aus meiner Session ausgelesen. Ich führe die Anweisung aus und wir bekommen als Ergebnis "1008". "1008" ist die Nummer für die neue Bestellung, die vergeben worden ist. Also verwenden wir genau diese Nummer hier beim Einfügen der Positionen. Ich habe das hier schon in dieser Form vorbereitet. Was wir einfügen müssen ist also, die neue Bestellnummer, die Bezeichnung und die Artikelnummer, und diese holen wir aus der Artikeltabelle. Laut Angabe sollen das die Artikel in diesem Nummernbereich sein. Als Preis übernehmen wir den aktuellen Einkaufspreis und als Menge die "12". als Rabatt, ich war großzügig, habe ich hier zehn Prozent festgelegt. Wichtig ist, dass wir für die Position eine fortlaufende Nummerierung von eins bis sechs ... weil sechs Artikel sind es in dem Fall ... vergeben. Dafür können wir bei Oracle die interne Spalte ROWNUM verwenden. Die ROWNUM wird bei einem SELECT vergeben, in der Reihenfolge in der Werte abgerufen werden. Ich markiere jetzt das SELECT allein, um dieses SELECT dann mal testweise ohne dem darüberstehenden INSERT auszuführen und kann mir so vorweg das Ergebnis betrachten. Wir sehen also die definierte Bestellnummer, Hier ROWNUM liefert uns für die Position die Werte fortlaufend von eins bis sechs, Artikelnummer, Bezeichnung, fix der Wert "12" für die Menge, Einkauspreis und Prozentsatz. Nun führe ich die Anweisung aus, als Gesamtes, und habe damit nun sechs Zeilen in die Tabelle "bestellpositionen" eingefügt. Das Ergebnis könne wir natürlich kontrollieren. Zuersteinmal hier, indem ich die eingefügte Bestellung und den Bestellkopf ausgebe ... Wir sehen hier, dass das aktuelle Datum vergeben worden ist, über den Default-Wert ... und die entsprechenden Bestellpositionen, die wir gerade eingefügt haben, können wir hier auch abrufen. Das entspricht genau dem SELECT, wie wir es vorher gesehen haben. Wenn Sie den zweiten Teil der Aufgabenstellung, das Übernehmen der Bestellung in einen Wareneingang, noch nicht umgesetzt haben und das jetzt in einem zweiten Schritt noch erledigen möchten, Pausieren Sie nun das Video und lösen Sie die Aufgabe. Wenn Sie damit fertig sind fahren Sie mit dem Video fort und sehen Sie sich meine Musterlösung an. Sehen wir uns nun die Lösung für den zweiten Teil der Aufgabenstellung, das Übernehmen der Bestellung als Wareneingang an. Die Idee dahinter ist, dass genau die Bestellung geliefert wurde, mit einem entsprechenden Lieferschein, und der enthält genau die Dinge, die auch auf der Bestellung enthalten waren. Also können wir beim Einfügen in den Wareneingang diese direkt auslesen und einfügen, und müssen sie nicht noch einmal händisch vergeben. Ähnlich wie zuvor bei der Bestellung, fügen wir einen neuen Wareneingangskopf in die Tabelle Wareneingang ein. Dafür verwenden wir wieder eine Sequenz, diese trägt diesmal den Namen "wae_seq" Und wieder mit der Methode "nextval" rufen wir den nächsten Wert ab und fügen ihn ein. Als Bearbeiter habe ich die Personalnummer "799" ausgewählt, Lieferant ist natürlich mit "1001" ident mit jenem, bei dem wir bestellt haben. und das ist die von mir definierte Lieferscheinnummer, die wir dazu verwenden wollen. Ich führe also diese Anweisung aus, um nun wieder eine Zeile einzufügen. Wieder können wir ähnlich wie vorhin mit der Anweisung "SELECT ... wae_seq.currval" für "current value", den vergebenen Sequenzwert auslesen. Diesen werden wir dann wieder für das INSERT in die Wareneingangs- positionen einsetzen. Der Wert, den wir bekommen, trägt "2", eins , zwei, drei, vier, fünf Nullen und "8". Den übernehmen wir. Das habe ich hier schon vorbereitet, diese Nummer, sonst müsste ich genau diese Nummer hier eintragen. Und nun fügen wir in die Tabelle "WARENEINGANGSPOSITIONEN" ein und lesen genau das aus der Tabelle "BESTELLPOSITIONEN" aus, was wir vorher mit der Bestellnummer "1008" eingefügt haben. Was wir hier ergänzen müssen, ist die "1" als Nummer für das Lager, zu denen die Artikel später zugebucht werden sollen. Und fix natürlich die vorher definierte Wareneingangsnummer. Ich markiere wieder selbstständig alleine den unteren Teil des SELECTS, um mir das Ergebnis vorweg, bevor wir es einfügen, kontrollierend anzusehen. Nun sehen wir, was eir einfügen würden. Und im Zweiten Schritt, nachdem die Kontrolle ergeben hat, das es aus meiner Sicht passt, führe ich die Gesamtanweisung aus und habe nun wieder die sechs Positionen eingefügt. Mit dieser Anweisung können wir den Inhalt kontrollieren, einerseits den erfassten Wareneingangskopf und mit der zweiten Anweisung, die entsprechenden Positionen zu diesem Wareneingang. Wenn Sie der Meinung sind, dass das alles so passt, dann beenden wir die Transaktion mit einem COMMIT und schreiben damit die Änderungen fest. In diesem Beispiel haben wir also gesehen, wie wir in eine Tabelle mit einem Selectus einfügen und vor allem, wie wir bei Oracle eine Sequenz einsetzen. Mit der Methode "nextval" wird ein neuer Wert aus einer Sequenz abgerufen, über die Eigenschaft "currval" kann dieser dann ausgelesen werden. Der "current value" ist deshalb wichtig, weil wir genau den danach verwenden müssen um dazu passende, in unserem Beispiel Bestellpositionen oder im zweiten Fall Wareneingangspositionen zu erfassen. Ich hoffe, das Beispiel war nicht allzu kompliziert für Sie und Sie konnten es zu Ihrer Zufriedenstellung lösen.

SQL Grundkurs 2: Aufgaben und Lösungen

Vertiefen Sie Ihre SQL-Kenntnisse. In diesem Workshop erhalten Sie zahlreiche Beispielaufgaben, die Sie selbst lösen können. Anschließend zeigt Ihnen der Trainer die Lösung.

7 Std. 41 min (61 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieses Training setzt SQL-Kenntnisse voraus, wie sie beispielsweise in „SQL lernen und anwenden“ vermittelt werden.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!