Variablen und deren Deklaration

Variablen sind die Namen, die wir PL/SQL Elementen geben, wie Tabellen, Cursorn oder Records.

  • Variablen können bis zu 30stellige Bezeichner haben
  • Sie müssen mit einem Buchstaben beginnen
  • Sie sind eine Kombination von Buchstaben, Zahlen, ,$,# und _
  • Eine Konstante ist eine spezielle Variable, sie hat einen Datentyp und ihr Wert wird zum Zeitpunkt der Erzeugung gesetzt.

Wenn Sie einen Variablennamen wählen, sollte dieser so gut wie möglich die Bedeutung der Variablen im Algorithmus beschreiben. Versuchen Sie stets, lesbare Namen zu wählen. PL/SQL erlaubt die Nutzung des _ im Namen, so dass es recht einfach ist, lesbare Namen zu erzeugen.

Jede Konstante und Variable, die in Ihrem Programm definiert wird, hat einen Datentyp. Der Datentyp bestimmt das Speicherformat und Einschränkungen, wie die Variable genutzt werden kann und welche Werte sie enthalten kann.

Ein skalarer Datentyp ist atomar, das heißt, der Datentyp besteht aus keinen weiteren Datentypen. PL/SQL erlaubt mehrere sogenannte zusammengesetzten Datentypen, dazu gehören Tabellen und Records. Dazu aber später mehr.

Skalare Datentypen gehören zu einer der folgenden vier Familien: Number, Character, Boolean und Date. Wir wollen an dieser Stelle die Datentypen nicht weiter beschreiben, die ORACLE Dokumentation gibt einen gründlichen Überblick. Wir beschreiben die Datentypen, wenn sie im folgenden genutzt werden.

Haben Variablen einen Initialwert?

Dies ist eine häufig gestellte Frage und wir können Sie eindeutig beantworten: Ja, unabhängig vom Datentyp ist es NULL. Damit taucht die Frage auf, was denn NULL ist?

  • NULL ist unbekannt (undefiniert).

Jetzt ist es raus! Behalten Sie nur drei Dinge im Hinterkopf über NULL-Werte:

  • NULL ist niemals gleich einem anderen Wert (auch nicht einem anderen NULL)
  • NULL ist niemals ungleich einem anderen Wert (auch nicht einem anderen NULL)
  • Jede mathematische Operation mit einem NULL-Wert führt zu NULL.

Diese Feststellung ist deshalb so wichtig, weil bei der Deklaration von Variablen, – unabhängig davon, welchen Typ sie hat -, die Variable mit NULL initialisiert wird. Das ist ein wichtiger Unterschied zu Programmiersprachen, wo z.B. die numerische Null der Initialwert ist.

Deklaration

Bevor eine Variable referenziert, sprich genutzt werden kann, muß sie definiert werden. Wenn eine Variable deklariert wird, allokiert PL/SQL den notwendigen Speicher für das Ablegen des Variablenwerts. Die Syntax zur Variablendeklaration ist

variable_name datatype [optional assignment];

Beispiel

age_of_person number := 31;

Die vorgenommene Wertzuweisung ist optional. Wird kein Initialwert zugewiesen, ist der Initialwert unabhängig vom Datentyp NULL.

Unsere Deklaration kann unbeschränkt (unbounded) oder beschränkt (bounded) sein. Das bedeutet, dass wir die Mächtigkeit, bzw. Größe der möglichen Werte einschränken. Unsere NUMBER Variable aus obigem Beispiel unterstützt bis zu 38 Stellen. Wenn wir die Variable beschränken mit number(2), allokiert PL/SQL nur soviel Platz, um zweistellige Zahlen abzulegen.

Beispiel

age_of_person number(2) := 31; 
age_of_person2 number(2) default 31; -- wir nehmen an, dass niemand aelter als 99 wird

Auch komplexe Ausdrücke sind möglich:

zu_spaet_ueberwiesen boolean := sysdate > zahlungsdatum + 5;

Konstanten

Wollen Sie Konstanten deklarieren, geschieht das wie folgt:

pi constant number := 3.141; 
-- pi darf im ausführbaren Teil kein anderer Wert  
-- zugewiesen werden

Denken Sie daran, dass Sie Konstanten im ausführbaren Teil keine Werte mehr zuweisen dürfen, daher muss eine Wertzuweisung im Deklarationsteil erfolgen. Die Wertzuweisung erfolgt entweder über := oder das Schlüsselwort DEFAULT

Subtypen

Es ist weiterhin möglich, neue Datentypen auf Basis vorhandener Typen zu definieren und Variablen dieses Typen zu erzeugen:

subtype zweistellig is number(2); 
mein_alter zweistellig; 
subtype wuerfel is binary_integer range 1 .. 6; 
mein_wuerfel wuerfel;

Da Sie sicherlich häufig mit Variablen arbeiten, um Daten aus Tabellen zu nutzen, ist die verankerte Variablendeklaration eleganter.

Verankerte Deklaration

Verankerte (anchored) Deklaration bedeutet, daß wir die %TYPE-Deklaration nutzen. PL/SQL verankert den Datentyp der Variablen am Typ einer anderen Struktur, normalerweise der Spalte einer Tabelle. Der Vorteil der Verankerung ist, dass PL/SQL Code nicht modifiziert werden muß, wenn der referenzierte Datentyp sich verändert.

Beispiel:

age_of_person number := 31; 
age_of_person2 age_of_person%TYPE; 
-- Wir beziehen uns auf eine zuvor deklarierte Variable 
-- der ihr zugewiesene Wert wird nicht übernommen

Genauso können Sie sich auf den Datentyp einer Spalte einer Tabelle beziehen.

Beispiel:

age_of_person mytable.mycolumn%TYPE; 
-- wir beziehen uns auf den Datentyp der Spalte mycolumn von der 
-- Tabelle mytable, die sich in unserem Schema(!) befindet

Tips zum Umgang mit Variablen

  • Benutzen Sie stets selbsterklärende Namen und versuchen Sie, Namenskonventionen für die verschiedenen Arten von Variablen zu etablieren.
  • Versuchen Sie nicht, Variablen wiederzuverwenden. Lesen Sie dies als, NIEMALS Variablen wieder verwenden! Die Wiederbenutzung von Variablen kann mehr Probleme bereiten als man denkt. Versuchen Sie mal ein Programm zu debuggen, in dem immer wieder die gleiche Zählervariable genutzt wird, aber eben nicht nur zum Zählen…
  • Versuchen Sie wann immer möglich, Konstanten zu verwenden anstelle von hart kodierten Werten. Nachträgliche Änderungen müssen somit nur im Deklarationsteil erfolgen.
  • Entfernen Sie ungenutzte Variablen aus dem Code. Einige Programme entwickeln sich über eine lange Zeit. Wenn Sie Variablen nicht mehr nutzen, entfernen Sie diese aus dem Code. Es macht es einfacher, den Code zu verstehen.
  • Wenn Sie eine Variable nutzen, um den Wert einer Tabellenspalte aufzunehmen, nutzen sie die verankerte Deklaration für die Variable mit %TYPE.

Beachten Sie auch folgende Besonderheit

Beispiel:

DECLARE    
  age_of_person NUMBER(10);    
  age_of_person VARCHAR2(10); 
BEGIN      
  NULL; 
END;

Dieser Block terminiert erfolgreich, der Compiler meldet keinen Fehler. Die Besonderheit ist, dass erst bei der Verwendung der Variablen im ausführbaren Teil des Programms ein Fehler gemeldet wird.

Dieser Artikel beschreibt lediglich die Deklaration von skalaren Variablen. Es gibt aber auch komplexe Datentypen, denen wir uns später zuwenden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.