Variablen und Konstanten

Alle Variablen, Zeilen und Datensätze, die in einem Block oder seinen Unterblöcken verwendet werden, müssen im Deklarationsabschnitt eines Blocks deklariert werden. Es gibt einige Ausnahmen, nämlich die Schleifenvariable einer FOR-Schleife, die einen Bereich von Ganzzahlwerten iteriert, und einige integrierte Variablen wie FOUND, ROW_COUNT und LAST_OID.

NZPLSQL-Variablen können einen beliebigen SQL-Datentyp haben, z. B. INTEGER, VARCHAR und CHAR. Es folgen einige Beispiele für die Deklaration von Variablen:

user_id INTEGER;
quantity NUMERIC(5,2);
url VARCHAR;
Eine Variablendeklaration weist folgende Syntax auf:
name [ CONSTANT ] type [ NOT NULL ] [ { DEFAULT | := } value ];
  • Falls die Klausel DEFAULT eingeschlossen ist, gibt Sie den Anfangswert an, der der Variablen bei der Eingabe des Blocks zugewiesen wurde. Wenn die Klausel DEFAULT nicht angegeben ist, verwendet die Variable als Standardwert den SQL-Wert NULL.
  • Die Option CONSTANT bedeutet, dass die Variable nicht geändert werden kann; der zugehörige Wert bleibt für die Bestehensdauer des Blocks konstant.
  • Wenn NOT NULL angegeben wird, führt die Zuordnung des Werts NULL zu einem Laufzeitfehler. Da der Standardwert aller Variablen der SQL-Wert NULL ist, müssen alle als NOT NULL deklarierten Variablen auch einen Standardwert angeben, der ungleich null ist.

Bei der Angabe von Typen in Deklarationen kann NUMERIC mit oder ohne Genauigkeit und Anzahl der Kommastellen angegeben werden. CHAR, NCHAR, VARCHAR und NVARCHAR können mit oder ohne eine Größe angegeben werden. Werden diese Typen mit einer Größe oder einer Genauigkeit/der Anzahl der Kommastellen angegeben, folgt die Zuweisung zur Variablen den normalen Umsetzungsregeln. Wenn sie ohne Größenangaben angegeben werden, behält die Zuweisung die ursprüngliche Quellengröße oder Genauigkeit/Anzahl der Kommastellen bei.

Der Standardwert wird bei jedem Aufruf der Prozedur ausgewertet. Das Zuweisen von now() zu einer Variablen des Typs 'Zeitmarke' bewirkt, dass für die Variable der Zeitpunkt des tatsächlichen Prozeduraufrufs festgelegt wird, nicht der Zeitpunkt der Vorkompilierung in ihren Bytecode.

Es folgen einige Beispiele für Variablenzuweisungen:
quantity INTEGER := 32;
url varchar := 'http://mysite.com';
user_id CONSTANT INTEGER := 10;

Durch Verwendung der Attribute %TYPE und %ROWTYPE können Sie Variablen desselben Datentyps oder derselben Struktur eines anderen Datenbankelements deklarieren (z. B. eines Tabellenfelds).

Mit dem Attribut %TYPE wird der Datentyp einer Variablen oder einer Datenbankspalte angegeben. Sie können mit diesem Attribut Variablen deklarieren, die Datenbankwerte enthalten. Wenn z. B. in Ihrer Benutzertabelle eine Spalte mit dem Namen 'user_id' vorhanden ist, können Sie eine Variable mit demselben Datentyp wie 'user_id' wie folgt deklarieren:
user_id users.user_id%TYPE;

Durch Verwendung von %TYPE müssen Sie nicht den Datentyp der Struktur kennen, die Sie referenzieren. Wenn sich der Datentyp des referenzierten Elements in der Zukunft ändert (Sie ändern beispielsweise Ihre Tabellendefinition von 'user_id' in REAL) müssen Sie nicht auch Ihre Prozedurdefinition ändern.

Sie können eine Zeile mit der Struktur einer Tabelle deklarieren, wie folgt:
name table%ROWTYPE;

Der Wert für Tabelle muss eine vorhandene Tabelle oder ein vorhandener Ansichtsname in der Datenbank sein. Auf die Felder der Zeile wird mit der Punktschreibweise zugegriffen.

Nur die Benutzerattribute einer Tabellenzeile sind in der Zeile zugänglich. Sie können nicht auf eine OID oder ein anderes Systemattribut zugreifen, weil die Zeile aus einer Ansicht stammen könnte. Die Felder des Zeilentyps übernehmen die Größen oder die Genauigkeit für die Datentypen CHAR, NCHAR und NUMERIC aus der Tabelle.