PL-SQL: Variablen

Aus Wikibooks


ORACLE Built-in Datentypen[Bearbeiten]

Text[Bearbeiten]

Bezeichnung Beschreibung Deklarationsbeispiel Anwendungsgebiet Kommentar
CHAR(size) Speicherung von Texten fester Länge CHAR(8) Codes oder Abkürzungen gleicher Länge Maximale Größe 32767 Bytes. Default und Minimum sind 1 Byte. Beim Speichern wird der übergebene String mit Leerzeichen bis zur deklarierten Länge aufgefüllt.
NCHAR(size) Speicherung von Texten fester Länge NCHAR(8) Codes oder Abkürzungen gleicher Länge Ähnlich CHAR in Unicode, maximal 32767/2 bei AL16UTF16 encoding, und 32767/3 bei UTF8.
VARCHAR2(size) Speicherung von Texten variabler Länge VARCHAR2(200) Zeichenketten bis maximal 32767 Byte Häufig verwendeter Datentyp für Texte - Basisdatentyp. Bei der Deklaration muss eine Längenangabe erfolgen, dies ist die maximale Größe. Bei Vergleichsoperationen wird nur der tatsächlich gespeicherte String verglichen.
NVARCHAR2(size) Speicherung von Texten variabler Länge NVARCHAR2(200) Zeichenketten bis maximal 32767 Byte Ähnlich VARCHAR2 in Unicode, maximal 32767/2 bei AL16UTF16 encoding, und 32767/3 bei UTF8.
LONG Speicherung von langen Texten LONG Texte bis zu 4 GB oder 231 -1 Bytes. LONG sollte nicht mehr verwendet werden. Oracle empfiehlt statt dessen LOB zu verwenden, da LONG möglicherweise in Zukunft nicht mehr supported wird.
CLOB Speicherung von langen Texten CLOB Texte bis zu (4 GiBytes - 1)*Blocksize (8, 16, 32, 64 oder 128 TiByte) Character Large Object speichert lange Texte im Datenbankzeichensatz.
NCLOB Speicherung von langen Texten NCLOB Texte bis zu (4 GiBytes - 1)*Blocksize (8, 16, 32, 64 oder 128 TiByte) Character Large Object für Unicodezeichen.

Zahlen[Bearbeiten]

Bezeichnung Beschreibung Deklarationsbeispiel Anwendungsgebiet Kommentar
NUMBER(p,s) Speicherung von Zahlen mit fest definierter Genauigkeit(p) und Anzahl der Nachkommastellen(s) NUMBER(22,2) Währung Sehr häufig verwendeter Datentyp für alle Zahlenformate - Basisdatentyp.

1 <= p <= 38, -84 <= s <= 127.
Wertebereich 1.0 x 10-130 bis 9.9...9 x 10125.
Integer können mit NUMBER(p) definiert werden, Fließkommazahlen mit NUMBER.

Datum[Bearbeiten]

Bezeichnung Beschreibung Deklarationsbeispiel Anwendungsgebiet Kommentar
DATE Speicherung von Datum und Zeit DATE Datum und Zeit (in Sekundengenauigkeit) Erlaubtes Intervall von 1.1.4712 v.Chr. 31.12.9999 n.Chr..
TIMESTAMP (fractional_seconds_precision) Zeitstempel TIMESTAMP(6) z.B. Audit des Erstellungszeitpunkts eines Datensatzes Datum mit Tag, Uhrzeit und den spezifizierten Sekundenbruchteilen (0-9)
TIMESTAMP (fractional_seconds_precision) WITH TIME ZONE Zeitstempel TIMESTAMP(6)   wie TIMESTAMP mit Abweichung der Zeitzone
TIMESTAMP (fractional_seconds_precision) WITH LOCAL TIME ZONE Zeitstempel TIMESTAMP(6)   wie vorhergehendes mit folgenden Ausnahmen: Beim Speichern werden die Daten auf die Zeitzone der Datenbank normalisiert, beim Auslesen auf die Zeitzone des Anwenders.
INTERVAL YEAR (year_precision) TO MONTH Zeitintervall INTERVAL YEAR (2) TO MONTH   Zeitintervall in Jahren und Monaten, wobei year_precision die Zahl der Stellen im Jahresfeld des Datums ist (0-9).
INTERVAL DAY (day_precision) TO SECOND (fractional_seconds_precision) Zeitintervall INTERVAL DAY (2) TO SECOND (5)   Zeitintervall in Tagen, Stunden, Minuten und Sekunden, wobei day_precision die Maximale Zahl der Ziffern bei den Tagen angibt (0-9). fractional_seconds_precision ist der Sekundenbruchteil (0-9).

Binärdaten[Bearbeiten]

Bezeichnung Beschreibung Deklarationsbeispiel Anwendungsgebiet Kommentar
RAW (size) Binärdaten RAW(256)   Binärdaten mit spezifizierter Länge, maximal 2000 Bytes.
LONG RAW Binärdaten LONG RAW   Binärdaten mit variabler Länge. Maximale Größe 2 GB. Oracle empfiehlt statt LONG RAW besser BLOB zu verwenden, da die Verarbeitung weniger Restriktionen unterliegt.
BLOB Binärdaten BLOB z.B. in der Datenbank gespeicherte Worddateien Maximale Größe bis zu (4 GiBytes - 1)*Blocksize (8, 16, 32, 64 oder 128 TiByte)
BFILE Verweis auf eine Binärdatei BFILE z.B. Verweis auf externe Videodateien Verweis auf eine Binärdatei, die Außerhalb der Datenbank abgelegt ist. Maximale Größe 8 Terabyte

Sonstige[Bearbeiten]

Bezeichnung Beschreibung Deklarationsbeispiel Anwendungsgebiet Kommentar
ROWID Eindeutige Adresse einer Zeile in einer Tabelle ROWID z.B. temporäre Kennung eines Datensatzes ohne eindeutige ID Nicht portable, interne Adresse für einen Datensatz; erhält man beim SELECT durch Angabe der Pseudospalte ROWID.
UROWID [(size)] Logische Adresse einer Zeile in einer index-organized table. UROWID   Maximale Größe 4000 Bytes.

PL/SQL Datentypen[Bearbeiten]

Neben den Built-in Datentypen, die auch für die Definition von Tabellen benutzt werden können, können in der Sprache PL/SQL weitere Datentypen verwendet werden.

Zahlen[Bearbeiten]

Bezeichnung Beschreibung Deklarationsbeispiel Anwendungsgebiet Kommentar
PLS_INTEGER Ganzzahlen mit einer Größe von -2.147.483.647 bis +2.147.483.647 PLS_INTEGER[()] Normale Zahlen, Iterationen Sehr häufig verwendeter Datentyp für Rechenoperationen (Rechnen mit Ganzzahlen), seit Version 10g identisch mit BINARY_INTEGER

Hinzu kommen noch Datentypen, die der Benutzer selbst definieren kann. Hierzu gehören Objekte, die wie in der objektorientierten Programmierung eigene Methoden und Attribute haben, Arrays und Collections.

Datentyp über Spalte festlegen[Bearbeiten]

Variablenname Tabellenname.Spaltenname%type;

Definiert eine Variable des Typs der angegebenen Spalte.

Datentyp über Tabelle festlegen[Bearbeiten]

Variablenname Tabellenname%rowtype;

Definiert eine Variable des Typs der angegebenen Tabelle.

Beispiel :

   CURSOR cursor_name IS
       SELECT *
       FROM tabelle;
   
   variable tabelle%rowtype;
   
   ...
   
   FOR i IN cursor_name LOOP
   
       variable := i;
       andere_variable := variable.SPALTENNAME;
   
   END LOOP;

Benutzerdefinierte Datentypen[Bearbeiten]

Benutzerdefinierte Datentypen werden mit Hilfe von "type datentyp is record(feld1 typ1 :=xyz, feld2 typ2 :=xyz, ..., feldn typn :=xyz);" definiert.

declare
    type t_adresse is record(
        hausname adresse.hausname%type,
        strasse adresse.strasse%type,
        hausnummer adresse.hausnummer%type,
        postleitzahl adresse.postleitzahl%type);
    v_adresse t_adresse;
begin
    select hausname,strasse, hausnummer, postleitzahl into v_adresse from adresse where rownum = 1;
end;

Das Beispielprogramm definiert einen eigenen Datentyp mit Namen t_adresse welcher die Felder hausname, strasse, hausnummer und postleitzahl enthält.

Mit diesem Datentyp wird eine Variable v_adresse definiert, welche mit einem Datensatz aus der Tabelle adresse gefüllt wird.

Mittels Punktnotation kann auf die Attribute zurückgegriffen werden "v_adresse.hausname := 'Nollenburgerweg 115';"