Inhalt
Ein Definitionsversuch
In fast jedem PL/SQL Buch wird man lesen, daß PL/SQL die “prozedurale Erweiterung zur Strukturierten Abfragesprache SQL” ist. Wenn dies verwirrend scheint, schauen wir uns an, was wir wissen müssen, um diese Definition zu verstehen.
- Was eine Computer-Sprache ist
- Was “prozedural” in diesem Zusammenhang bedeutet
- Einige Konzepte von SQL (Structured Query Language), einschließlich der Anmerkung, daß SQL nicht prozedural ist
- Die Idee einer Sprach-“Erweiterung”
Eine Computer-Sprache ist ein bestimmter Weg, Ausführungsanweisungen an einen Computer zu geben (also Programmierung). Computer-Sprachen neigen zu einem geringen Wortschatz gegenüber der mächtigen menschlichen Sprache. Außerdem sind die Möglichkeiten des Vokabular-Einsatzes weit weniger flexibel als bei Menschen. Diese Einschränken rühren daher, daß ein Computer alles literal versteht, also keine Möglichkeiten besitzt, “zwischen den Zeilen zu lesen” und Annahmen über die Anweisungen zu machen (vgl. Semantik, Syntax).
Prozedural meint eine Aneinanderreihung einzelner Schritte, die ein Computer ausführen muß, um das gewünschte Ergebnis zu erhalten. Diese Sprachtypen beinhalten Datenstrukturen, die es erlauben, Informationen mehrfach wiederzuverwenden. Die einzelnen Schritte können in einem Flußdiagramm grafisch dargestellt werden (obwohl Flußdiagramme heutzutage aus der Mode sind). Programme, die in einer solchen Sprache geschrieben werden, nutzen ihre sequentiellen, konditionalen und interaktiven Konstrukte, um Algorithmen auszudrücken. Also sagt dieser Teil der Definition von PL/SQL aus, daß es der gleichen Sprachfamilie angehört wie bspw. BASIC, COBOL, FORTRAN, PASCAL, C…
Die strukturierte Abfragesprache (Structured Query Language) SQL basiert auf der Mengentheorie, es geht hier also stets um die Arbeit mit Datenmengen, und nicht einzelnen Elementen. SQL besteht aus einer relativ geringen Menge von Befehlen wie SELECT, INSERT, CREATE and GRANT. Tatsächlich jedoch erledigt jeder Befehl allein soviel wie manchmal hunderte Zeilen prozeduraler Code. Das ist mit einer der Gründe, warum SQL-basierte Datenbanken so weit verbreitet sind. Das Merkwürdige am Namen SQL ist jedoch, daß es eigentlich nicht wirklich strukturiert ist, nicht nur für Abfragen benutzt werden kann und (manch einer behauptet das) nicht mal eine echte Sprache ist. Nichtsdestotrotz ist SQL am nächsten an einer lingua france für relationale Datenbanken wie ORACLE RDBMS, IBMs DB2 oder Microsofts SQL Server.
Eine Spracherweiterung sind eine Reihe von Eigenschaften, die eine bestehende Sprache erweitern. Diese Aussage scheint trivial und mag fälschlicherweise ausdrücken, daß PL/SQL eine spezielle Version von SQL ist. Dies ist nicht der Fall. PL/SQL ist eine Programmiersprache mit einer eigenen Existenzberechtigung, sie hat ihre eigene Syntax, eigene Regeln und einen eigenen Compiler. Man kann PL/SQL Programme mit oder ohne SQL-Befehlen schreiben. Einige Authoren behaupten, PL/SQL sei eine Obermenge von SQL, dies ist allerdings ein wenig übertrieben, denn nur die einfachen SQL Befehle können einfach in PL/SQL Programmen eingesetzt werden.
Also ist PL/SQL eng verbunden mit SQL, erlaubt jedoch den Einsatz prozeduraler Sprachelemente und damit die Aneinanderkettung einzelner Befehle.
Ein anderer Weg, PL/SQL zu definieren
Ein Programmierer profitiert beim Einsatz von PL/SQL durch folgende Eigenschaften: PL/SQL ist eine prozedurale Sprache mit Unterstützung von benannten Programmeinheiten, viel Syntax ist angelehnt an ADA, und von ORACLE’s SQL werden die Datentypen abgeleitet sowie viele built-in-functions.
Als ein Einsteiger in die Welt der relationalen Datenbanken mag man sich wundern, warum das hochgelobte SQL nicht immer ausreichend ist. Tatsächlich sind die mächtigen SQL Operationen ein großer Vorteil für Programmierer, jedoch enthält die wirkliche Welt der Programmierung viele Aufgaben, die nicht durch eine Manipulation der Datenbank bearbeitet werden können.
SQL ist keine allgemeingültige Sprache, um Algorithmen auszudrücken. Obwohl man “Programme” bauen kann, die aus einer Reihe einzelner Befehle bestehen, können solche Programme keine konditionale Logik beinhalten, soll heißen, SQL kennt keine Möglichkeit, Bedingungen auszudrücken wie „Wenn eine Aussage wahr ist, tue dies, andernfalls jenes“. PL/SQL kann solche Bedingungen bearbeiten.
Zusätzlich hat SQL einige Lücken für die Implementierung von Sicherheitsmechanismen. Versucht man sich einzig auf die SQL-Möglichkeiten zur Gewährleistung von Sicherheit zu beschränken, hat der DBA die Möglichkeit, zu bestimmen, wer die Daten manipulieren darf, aber nur geringe Möglichkeiten, zu beeinflussen, wie sie verändert werden dürfen. Beispielsweise hat der Benutzer OTTO das Recht bekommen, die Buchhaltungstabelle zu verändern (UPDATE). Die Geschäftsprozeßlogik, die beschreibt, wie geändert werden darf, muß ohne PL/SQL in das Front-End (bspw. Visual Basic) gepackt werden. Nun, umgeht OTTO das Front-End und nutzt bspw. Microsoft Excel für den Zugriff auf die Datenbank, kann er damit alle Sicherheitmechanismen umgehen.
Ohne PL/SQL ist es also sehr schwierig, seine Daten vor beabsichtigten und unbeabsichtigten Änderungen zu schützen. Durch den Einsatz von PL/SQL (teilweise in Kombination mit der „Fine Grained Access Control“, eingeführt in ORACLE 8i) kann man versuchen, dieses Loch zu schließen.
Im Umkehrschluß hat PL/SQL also bestimmte Eigenschaften nicht.
Was ist PL/SQL nicht
So brauchbar wie PL/SQL ist, gibt es dennoch Dinge, die es nicht kann (zumindest nicht ohne ein paar Tricks und Kniffe).
Geringe Möglichkeiten der Benutzer-Interaktion
Obwohl PL/SQL viele Konstrukte anbietet, um mit Daten der Datenbank zu interagieren, gibt es nur geringe Möglichkeiten, um direkt mit dem Benutzer zu interagieren. Es gibt einen sehr „basisnahen“ Weg, dem Nutzer Daten in Textform zu liefern, allerdings keinen direkten Weg, um Daten vom Nutzer zu erhalten. Man wird also typischerweise eine andere Sprache nutzen, um ein Front-End zu implementieren, welches dann den Benutzer-Input an PL/SQL weitergibt. Meistens ist das sogar gewollt, um das Datenmanagement von der Präsentation der Daten zu trennen.
Proprietäre Sprache
PL/SQL ist proprietär und abhängig von der Oracle Corporation. Sie ist nicht nutzbar in Produkten von Drittanbietern. Obwohl es Wege gibt, die ORACLE Datenbank in Servern von anderen Herstellern zu integrieren, wird PL/SQL ausschließlich innerhalb der ORACLE Produkte ausgeführt. Das ist das Schicksal der Hersteller, die versuchen, ihre Produkte datenbankunabhängig zu realisieren. Deshalb werden große Hersteller nur ungern auf PL/SQL als ihre Standard-Datenbanksprache migrieren.
Eingeschränkte objektorientierte Möglichkeiten
Bis zur Version 9 fehlen PL/SQL die Möglichkeiten der objektorientierten Sprachen, obwohl bereits in Version 8 Unterstützung für bspw. abstrakte Datentypen implementiert ist. Objektbasierte Entwicklung ist jedoch bereits seit Version 7 implementiert. Oracle 9i enthält nun mehr objektorientierte Verfahren wie Vererbung, Polymorphismus, obwhl es noch Einschränkungen gibt wie bspw. fehlende private Methoden.
Nun, wenn wir bis hier gekommen sind, fragt man sich natürlich, – wenn PL/SQL nur ein Teil einer kompletten Applikation sein kann, wenn es nur innerhalb der ORACLE Produkte verfügbar ist, – warum nutzt man nicht eine andere Sprache wie C oder Java? Warum soll man sich mit PL/SQL überhaupt beschäftigen?