PL-SQL: Variablen
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. |
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';"