Letzt lag mal wieder das Oraclemagazin auf dem Tisch. Wer es nicht kennt: Ihr verpasst nicht viel. etwa 30% sind offiziell Werbung, 30% sind inoffizielle Werbung, d.h. Erfolgsstories von Firmen, 15% sind blah, blah (Leserbriefe und Kindheitsgeschichten von Oracle Mitarbeiter).

Die verbleibenden 15% brachten mein Blut zum wallen: Es gibt ein neues Oracle Feature: virtuelle Spalten. An sich ein wirklich nützliches Feature. Eine Spalte in einer Tabelle wird als Funktion definiert. Sie enthält keine eigenen Daten, sondern die Daten werden bei Bedarf berechnet. Im Gegensatz zu Function Based Indizes wird also praktisch kein zusätzlicher Speicher verbraucht. Oracle kann aber dennoch Statistiken sammeln, und so dem Optimizer wichtige Informationen liefern. Also, warum rege ich mich darüber auf? Wegen der Syntax! Quizfrage: Wofür steht AS in SQL? Ãœber AS werden Aliase definiert: Spalten, Tabellen, oder ganze Ausdrücke. Links steht der ursprüngliche Ausdruck, rechts der neue Name dafür. Cool, das ist ja wie geschaffen für virtuelle Spalten! Stimmt. Das hat sich Oracle auch gedacht und einem Praktikanten gesagt: Hei mach mal virtuelle Spalten und benutze AS um den Namen dafür zu definieren. Der konnte bloß noch kein SQL und hat es ordentlich versaut.

Die Syntax für eine virtuelle Spalte sieht so aus:

create table (x number,y as (x+1);

Hallooooo, warum steht der Name des Aliases auf einmal links?

Na, ich sollte mich wohl nicht so aufregen. Oracle demonstriert ja bei allem was bei normalerweise mit API Design zu tun hat Inkompetenz. Man betrachte nur das wunderbar einheitliche Benennung von Funktionen:

  • Es heißt ADD_MONTH (mit _) aber LOCALTIMESTAMP (ohne _)
  • Welche Funktion liefert einen Timstamp with Timezone, welche einen Timestamp ohne jegliche Ortsinformation: LOCALTIMESTAMP oder TIMESTAMP? Antwort: TIMESTAMP liefert die Zeitzonen Information mit, warum LOCALTIMESTAMP local im Namen führt wird wohl ein Geheimnis bleiben.
  • NEXT_DAY liefert das nächste Datum, an dem wir wieder einen bestimmten Wochentag haben. Der gesuchte Wochentag muss als TEXT angegeben werden.


Die ganze API ist voll mit solchen Krücken, und mit PLSQL will ich gar nicht erst anfangen. Ich bin wirklich beeindruckt von der Leistungsfähigkeit von Oracle. Hut ab vor allen Programmieren, die am Datenbankkern arbeiten. Aber den Rest ...

Talks

Wan't to meet me in person to tell me how stupid I am? You can find me at the following events: