Dieser Abschnitt fasst die grundlegenden Bestandteile der PL/SQL-Sprache zusammen: Zeichen, Bezeichner, Literale, Begrenzer, die Verwendung von Kommentaren und Pragmas sowie den Aufbau von Anweisungen und Blöcken.
Die Programmiersprache PL/SQL wird aus Buchstaben, Zahlen, Symbolen und Whitespace-Zeichen aufgebaut, die in der folgenden Tabelle genauer definiert werden:
Symbole | ˜!@#$%^&*( )_-+=|[ ]{ }:;"'< >,.?/ ^
|
Whitespace-Zeichen | Leerzeichen, Tabulator, Zeilenvorschub, Wagenrücklauf |
Zeichen werden zu vier lexikalischen Einheiten gruppiert: zu Bezeichnern, Literalen, Begrenzern und Kommentaren.
Bezeichner sind Namen für PL/SQL-Objekte wie Konstanten, Variablen, Exceptions, Prozeduren, Cursor und reservierte Wörter. Bezeichner besitzen die folgenden Merkmale:
Sie können bis zu 30 Zeichen lang sein.
Sie dürfen keine Whitespace-Zeichen (Leerzeichen, Tabulator, Wagenrücklauf) enthalten.
Sie müssen mit einem Buchstaben beginnen.
Sie können Dollar-Zeichen ($), Unterstriche ( _ ) oder Pfund-Zeichen enthalten (#).
Sie berücksichtigen keine Groß-/Kleinschreibung.
Außerdem dürfen Sie keine PL/SQL-Schlüsselwörter als Bezeichner verwenden.
Sie sollten davon absehen, die reservierten Wörter von PL/SQL in Ihren Programmen als Bezeichner zu verwenden, da das zu Kompilier- oder Laufzeitfehlern führen kann, die schwer zu lösen sind.
Tipp
In früheren Ausgaben enthielt dieses Buch eine Liste der reservierten Wörter. In der V$RESERVED_WORDS-Data-Dictionary-View von Oracle Database 11g Release 1 werden mittlerweile jedoch mehr als 1.600 Wörter als reserviert aufgeführt. Bei unseren Tests haben wir festgestellt, dass mehr als 650 dieser Wörter nicht als Namen von Prozeduren oder Variablen verwendet werden können. Schlagen Sie in V$RESERVED_WORDS nach, wenn Sie eine Liste der nicht unterstützten Bezeichner suchen, und vermeiden Sie diese als Programm- oder Variablennamen.
Wenn Bezeichner in Anführungszeichen eingeschlossen sind, werden alle oben genannten Regeln außer der ersten ignoriert. So ist z.B. die folgende Deklaration gültig:
DECLARE "1 ^abc" VARCHAR2(100); BEGIN IF "1 ^abc" IS NULL THEN ... END;
Boolesche, numerische und Zeichenliterale
Literale sind spezifische Werte, die nicht durch Bezeichner dargestellt werden. So sind z.B. TRUE, 3.14159, 6.63E-34, 'Moby Dick' und NULL allesamt Boolesche, numerische oder Zeichenliterale. Es gibt keine Literale von komplexen Datentypen, da ihre Werte interne Darstellungen sind; komplexe Typen erhalten ihre Werte durch eine direkte Zuweisung über einen Konstruktor. Anders als das übrige PL/SQL berücksichtigen Literale die Groß-/Kleinschreibung. Um einfache Anführungszeichen in ein Zeichenliteral einzubetten, müssen Sie zwei einfache Anführungszeichen nebeneinanderstellen.
Seit Oracle Database 10g können Sie Ihren eigenen Angabemechanismus für String-Literale in Ihren SQL- sowie PL/SQL-Anweisungen definieren. Verwenden Sie die Zeichen q'
(q und ein einfaches gerades Anführungszeichen), um den selbst definierten Begrenzer für Ihre String-Literale anzuzeigen. Schließen Sie den literalen String mit dem selbst definierten Begrenzer und einem anhängenden einfachen Anführungszeichen – z.B. q'!mein String!'
. NCHAR- und NVARCHAR-Begrenzern werden die Buchstaben nq
vorangestellt, z.B. nq'^NCHAR-String^'
. Diese Technik kann Ihren Code vereinfachen, wenn in einem String mehrere aufeinanderfolgende einfache Anführungszeichen auftauchen, wie es bei den Literalen in SQL-Anweisungen der Fall ist. Wenn Sie Ihren Begrenzer mit einem der vier Klammerzeichen ( [ {< definieren, müssen Sie als schließenden Begrenzer auch die schließende Klammerversion verwenden. Beispielsweise muss q'[
mit ]'
geschlossen werden.
Die folgende Tabelle zeigt einige Beispiele:
Literal | Tatsächlicher Wert |
---|
'That''s Entertainment!'
| That's Entertainment! |
q'#That's Entertainment!#'
| That's Entertainment! |
'TZ=''CDT6CST'''
| TZ='CDT6CST' |
q'$TZ='CDT6CST'$'
| TZ='CDT6CST' |
q'[TZ='CDT6CST']'
| TZ='CDT6CST' |
'''Hallo Welt'''
| 'Hallo Welt' |
q'!'Hallo Welt'!'
| 'Hallo Welt' |
nq'<Price='£10'>'
| Price='£10' |
nq'-WHERE name LIKE 'ñ'-'
| WHERE name LIKE 'ñ' |
Eventuell können Sie die Laufzeitperformance verbessern, wenn Sie den Datentyp numerischer Literale explizit angeben. Das erreichen Sie, indem Sie den Dezimaltrenner aus- oder einschließen oder indem Sie an den Zahlwert ein f
oder d
anhängen. Beispiele sehen Sie in der folgenden Tabelle:
Oracle Database 10g hat einige spezielle benannte Konstanten eingeführt:
BINARY_FLOAT_NAN (Not a Number, keine Zahl) |
BINARY_FLOAT_MAX_SUBNORMAL |
BINARY_FLOAT_MIN_SUBNORMAL |
Zu diesen Konstanten gibt es jeweils noch BINARY_DOUBLE_-Versionen.
Datums- und Uhrzeit-Intervall-Literale
Die in Oracle9i eingeführten Datums- und Uhrzeit-Intervall-Datentypen stellen ein zeitliches Intervall dar, das entweder in Jahren und Monaten oder in Tagen, Stunden, Minuten, Sekunden und Sekundenbruchteilen ausgedrückt wird. Literale dieser Datentypen werden über das Schlüsselwort INTERVAL angegeben, auf das das Literal und der/die Formatierungsstring(s) folgen. Bei der Intervallangabe müssen die größeren Felder den kleineren vorausgehen: Das heißt, YEAR TO MONTH ist zulässig, aber MONTH TO YEAR nicht. Beispiele finden Sie in der folgenden Tabelle:
Literal | Tatsächlicher Wert |
---|
INTERVAL '1–3' YEAR TO MONTH
| 1 Jahr und 3 Monate später |
INTERVAL '125–11' YEAR(3) TO MONTH
| 125 Jahre und 11 Monate später |
INTERVAL '?18' MONTH
| 18 Monate früher |
INTERVAL '-48' HOUR
| 48 Stunden früher |
INTERVAL '7 23:15' DAY TO MINUTE
| 7 Tage, 23 Stunden und 15 Minuten später |
INTERVAL '1 12:30:10.2' DAY TO SECOND
| 1 Tag, 12 Stunden, 30 Minuten und 10,2 Sekunden später |
INTERVAL '12:30:10.2' HOUR TO SECOND
| 12 Stunden, 30 Minuten und 10,2 Sekunden später |
Begrenzer sind Symbole mit einer besonderen Bedeutung, beispielsweise := (Zuweisungsoperator), || (Verkettungsoperator) und ; (Anweisungsbegrenzer). Die folgende Tabelle führt die PL/SQL-Begrenzer...