PL/SQL: Variablen
Aus Wikibooks
| ACHTUNG: Dieser Artikel bedarf dringend einer Überarbeitung oder Erweiterung. Wenn du Lust hast, beteilige dich daran! |
Inhaltsverzeichnis |
[Bearbeiten] ORACLE Built-in Datentypen
[Bearbeiten] Text
| 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. |
[Bearbeiten] Zahlen
| 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. |
[Bearbeiten] Datum
| 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). |
[Bearbeiten] Binärdaten
| 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 |
[Bearbeiten] Sonstige
| 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. |
[Bearbeiten] PL/SQL Datentypen
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.
[Bearbeiten] Zahlen
| 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.
[Bearbeiten] Datentyp über Spalte festlegen
Variablenname Tabellenname.Spaltenname%type;
Definiert eine Variable des Typs der angegebenen Spalte.
[Bearbeiten] Datentyp über Tabelle festlegen
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;
[Bearbeiten] Benutzerdefinierte Datentypen
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';"

