Diskussion:Einführung in SQL: Tipps und Tricks

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Übungen?[Bearbeiten]

Da es sich hier "nur" um einzelne Hinweise handelt, sind Übungen eher nicht von Bedeutung. Ich habe sie im Quelltext der Seite vorgesehen, aber im Moment auskommentiert. Wer sinnvolle Aufgaben hat, darf das selbstverständlich ändern. (Bitte wie in den anderen Seiten {{:{{PAGENAME}}:Übungen}} und {{Vorlage:Übung3}} benutzen. -- Jürgen 16:19, 9. Jan. 2010 (CET)

Oracle-Spezialitäten[Bearbeiten]

Homepage-Probleme[Bearbeiten]

In den letzten Tagen liefert die Oracle-Homepage häufig "Fehler 404". Deshalb stehen hier zz. nur Stichworte. -- Jürgen 16:19, 9. Jan. 2010 (CET)

Einige Ergänzungen[Bearbeiten]

Ich habe mal etwas zu Oracle geschrieben, dass meiner Meinung nach passen könnte. Zu der Einfüge-Reihenfolge hast Du ja in dieses Kapitel verwiesen. Ich habe hier mal eine etwas abgespeckte Variante eingetragen. Abgespeckt deswegen, weil mit dieser Query keine Ring-Verkettungen gefunden werden und auch alle anderen Tabellen ohne Fremdschlüssel nicht noch dazu ausgegeben werden. Vielleicht ist diese Query etwas besser zu verstehen, als die zuvor verwendete. Jürgen, ich hoffe, Du bist damit einverstanden. Falls nicht, dann kannst Du diesen Eintrag auch wieder entfernen. Viele Grüße --Julius-m 22:08, 16. Jan. 2010 (CET)

Ich habe es erstmal nur überflogen, aber ich glaube, so passt es. Danke! -- Jürgen 10:53, 17. Jan. 2010 (CET)
So, ich habe es etwas genauer gelesen. Eigentlich passt es; aber dann möchte ich es etwas kürzer formulieren und in einem Script zusammenfassen ("Fahrzeug" schlage ich vor, weil dort sowieso nur vier Felder vorhanden sind):

Nächste ID zuordnen und abfragen
Crystal Clear app terminal.png SQL-Quelltext:

-- Definition einer Sequence
CREATE SEQUENCE Fahrzeug_ID;
-- einen neuen Eintrag erstellen unter Abfrage der Sequence
INSERT INTO Fahrzeug
   VALUES ( Fahrzeug_ID.NEXTVAL, 'DO-WB 999', null, 7 );
-- Abfrage der zuletzt vergebenen ID
select Fahrzeug_ID.CURRVAL from dual;

Crystal Clear app kscreensaver.png SQL-Ausgabe:  

Fahrzeug_ID = 23

Andererseits bietet Oracle auch AUTO_INCREMENT an. Wie kann dann die aktuell vergebene ID abgefragt werden? -- Jürgen 13:13, 17. Jan. 2010 (CET)

Hallo Jürgen, Bei einer AUTO_INCREMENT kann man (so weit ich weiß) einen einmal generierten Wert nicht ein zweites Mal abfragen, wie bei einer Sequence. Genau dafür gibt es ja die Sequence in Oracle. Übrigens, die RETURNING-Angabe gibt es auch bei DB2. Man muss dann das Insert-Statement wiederum in ein Select-Statement einpacken, um die generierten Werte zu lesen. Man kann mit einem Insert ja auch mehrere Datenzeilen einfügen, daher braucht man auch ein SQL-Statement, dass mehrere Sätze ausgibt, die generiert wurden. Soll ich es als Syntax-Beispiel für DB2 ergänzen?
Zum Umfang dieses Abschnitts: Mir gefällt das Beispiel mit dem PL/SQL-Sktipt nicht so richtig, da in diesem Buch sonst von PL/SQL überhaupt nicht die Rede ist. Aber mir ist nichts besseres eingefallen. Ich frage mich, ob jemand, der sich mit Oracle nicht auskennt, sofort versteht, das die Abfrage von der DUAL-Tabelle soll? Wenn man dieses Beispiel nimmt, dann hätte das den Vorteil, dass man sich innerhalb der Theorie dieses Buches bewegt, aber ein erklärender Satz zur DUAL-Tabelle wäre vielleicht noch ganz gut. Übrigens: Die RETURNING-Angabe gibt es in Oracle auch für Insert. Soll ich dafür ein Beispiel hinzufügen?
Gibst Du mir auch noch ein Feedback zu dem Abschnitt 'Einfüge Reihenfolge bestimmen'? --Julius-m 16:12, 17. Jan. 2010 (CET)

DUAL ist erwähnt unter Einführung in SQL: Funktionen#Allgemeine Hinweise. Wir können es hier deshalb einfach benutzen.

Zu RETURNING: Bei Firebird werden die Werte (bzw. die ID als einziger Wert) als Ergebnis des INSERT-Befehls zurückgegeben und benötigen kein SELECT; innerhalb einer SP müsste man die INTO-Klausel hinzufügen. Wenn es bei DB2 und Oracle so ähnlich ist, könntest du das wahlweise direkt in den Firebird-Abschnitt einbauen oder incl. der Abweichungen als zusätzlichen Abschnitt hinzufügen. (Da ich immer nach dem Alphabet gegangen bin, käme DB2 an den Anfang.)

Zu deinem langen Abschnitt: Am Anfang dachte ich etwa so "wenn er es unbedingt so ausführlich machen will, bitte schön". Inzwischen kam mir der Gedanke: "Willst du es nicht zu einem Buch Einführung in SQL unter besonderer Berücksichtigung von Oracles PL/SQL umschreiben?" Bitte entscheide selbst, welcher Rahmen angemessen ist.

Zwischenzeitlich wollte ich selbst eine vergleichbare Routine für Firebird schreiben. Da wir in unserer Beispieldatenbank aber nur etwa ein Dutzend ForeignKeys und maximal 4 verknüpfte Tabellen haben, werde ich wohl darauf verzichten. Der Befehl, um alle FKs aufzulisten (siehe weiter unten in diesem Kapitel), ist für unsere Anfänger schon komplex genug.

Gruß Jürgen 16:55, 17. Jan. 2010 (CET)

Ein eigenes Buch - wie meinst Du das. Es gibt doch schon das Buch ORACLE und PL/SQL. Wenn Du meinst, mein geliebter Abschnitt zu den Fremdschlüsseln passt in Dein Buch nicht rein, dann sage es mir. Ich könnte diesen Abschnitt auch im Buch ORACLE unterbringen. Diese Idee gefällt mir sowieso ganz gut, dann könntest Du aus dem Kapitel Fremdschlüssel ja direkt darauf verweisen, wenn Du willst. --Julius-m 17:49, 17. Jan. 2010 (CET)

Nein, ich meinte kein neues Buch, sondern dieses. So umfangreich, wie dieser Abschnitt geworden ist, hatte ich den Eindruck, dass du das anstrebst. :) Ich habe aber auch geschrieben: "Bitte entscheide selbst, welcher Rahmen angemessen ist." -- Jürgen 17:59, 17. Jan. 2010 (CET)

ok, ich habe den Abschnitt nun in das Buch Oracle verschoben. Damit habe ich jetzt ein gutes Gefühl, dachdem dieser Abschnitt schon so oft umgezogen ist. Wenn Du willst, dann kannst Du ja darauf verweisen. --Julius-m 18:17, 17. Jan. 2010 (CET)