Datenbankprogrammierung - Instead of Trigger
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 93 | |
Author | ||
License | CC Attribution 4.0 International: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor. | |
Identifiers | 10.5446/65021 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
| |
Keywords |
00:00
Table (information)UpdateCountingSet (mathematics)Natural numberOracle <Marke>View (database)Row (database)ORACLSTable (information)UpdateFile viewerRow (database)Set (mathematics)MathematicsDecision theoryNatural numberGoodness of fitNumberView (database)BitInsertion lossWordRule of inferenceData storage deviceComputer animationXML
Transcript: German(auto-generated)
00:06
Hier eine kleine Erklärung zum Instead-of-Trigger. Und zwar haben wir schon kennengelernt, dass es Views gibt, die man nicht so ohne weiteres verändern kann. Ja, das macht auch ganz viel Sinn. Also, wenn wir uns die View hier mal angucken, da selektieren wir die Kundennummer, den Nachnamen, den Ort und wir zählen die Anzahl.
00:28
Nehmen das Ganze auch wieder Anzahl und joinen das Ganze mit Warenkorb überall, wo keine Anriele vorhanden ist. So, das Ganze gruppieren wir dann nach der Kundennummer für dieses Count-Anzahl,
00:43
dass dann natürlich immer die Anzahlen zusammengezählt werden von einem Kunden oder von den jeweiligen Kunden. Und ja, dann probieren wir hier eine Änderung darauf vorzunehmen. Update View Geschäftskunde, Set Ort gleich Bochum, Wear-Kundnummer 8523.
01:03
So, das funktioniert natürlich nicht. Warum funktioniert das nicht? Ja, Oracle weiß ganz einfach gesagt gar nicht, wo denn da jetzt in der Tabelle irgendwas geändert werden soll. Also, wir geben ja hier eine Kundennummer an, aber Oracle weiß quasi nicht,
01:21
okay, wollen wir jetzt einen Eintrag in Warenkorb verändern oder wollen wir den in Kunde verändern? Dazu kommt ja auch noch, dass wir das Ganze gruppiert haben, also dass wir alle Einträge mit der gleichen Kundennummer zusammengepackt haben. Das heißt, Oracle weiß erst recht nicht, wo jetzt welcher Datensatz verändert werden soll.
01:41
Wir selber haben da oft intuitiv so eine Idee, was wir verändert haben wollen, aber Oracle kann da natürlich keine Entscheidung treffen. So, das können wir mit dem sogenannten Instead-Of-Trigger lösen. Alles, was wir da nämlich machen, ist, wir sagen, Oracle, wenn wir eine Änderung auf dieser View vornehmen,
02:05
wie hier zum Beispiel mit dem Update, dann interpretiert das wie folgt. So, das sieht dann nämlich so aus. Wir sagen hier quasi Create or Replace Trigger. Also, sollte selbsterklärend sein, erschaffe den Trigger, wenn er schon da ist, dann ersetzt den.
02:22
Und sagen hier Instead of Update. Ja, also übersetzt anstatt einem Update auf der View, was ja nicht gehen würde, das hilft uns ja ein Fehler, mach doch ein Update hier auf Kunde.
02:40
Dann haben wir das so interpretiert, dass eine Änderung auf der View eine Änderung in Kunde mit sich ziehen soll und nicht in Warenkorb zum Beispiel. So, und hier können wir halt mit den Werten Doppelpunkt New, das ist dann der neue Wert, also hier Bochum,
03:02
und mit Doppelpunkt Old arbeiten. So, das ist dann die alte Kundennummer. Und wobei das wäre hier das Gleiche. Also alte und neue Kundennummer wäre hier das Gleiche, nur der Ort ändert sich ja hier. Ja, und damit können wir quasi definieren, was passieren soll, wenn wir eine Änderung auf einer View vornehmen,
03:25
die an sich eigentlich gar nicht änderbar ist. Wir sagen Oracle, okay, ich weiß, du bist verwirrt und du weißt nicht, wo jetzt irgendwie ein Eintrag geändert werden soll. Und das nehmen wir Oracle hier halt ab. Eigentlich ganz simpel.
03:40
Also dieses Create or Replace Trigger ist ein Schlüsselwort, was man sich merken sollte. Und dieses Instead of Update, es gibt auch noch Instead of Insert oder Instead of Delete, da kann man mal ein bisschen um experimentieren.
04:02
Ja, aber ich hoffe, das Grundprinzip ist einigermaßen klar geworden.