Die Version 9i bietet drei neue Datentypen als Erweiterung des Datentyps DATE, zwei neue Datentypen um Zeitintervalle zu speichern, drei neue vordefinierte Objekttypen, einige Erweiterungen zu LOBs und eine UNICODE-Unterstützung. Im Zusammenhang mit den neuen Datentypen wurden auch einige neue Datums- und Konvertierungsfunktionen eingeführt, die ebenfalls an dieser Stelle erwähnt werden sollen.
Neue DateTime-Datentypen
Zu den Erweiterungen von DATE gehören die Datentypen:
Beispiel:
SQL> ALTER DATABASE SET TIME_ZONE = '-5:00';
SQL> CREATE TABLE new_times (
2 zeit1 TIMESTAMP(3),
3 zeit2 TIMESTAMP(3) WITH TIME ZONE,
4 zeit3 TIMESTAMP(3) WITH LOCAL TIME ZONE);
SQL> INSERT INTO new_times VALUES (
'25.02.2002 10:34:58',
TIMESTAMP'2002-02-25 10:34:58.456 +2:00',
TIMESTAMP'2002-02-25 10:34:58.456 -3:00');
SQL> SELECT * FROM new_times;
ZEIT1 ZEIT2 ZEIT3
--------------------- ---------------------------- ----------------------
25.02.02 10:34:58,000 25.02.02 10:34:58,456 +02:00 25.02.02 14:34:58,456
Neue Interval-Datentypen
Zur Speicherung von Zeitintervallen gibt es nun die Datentypen:
Intervalle können zu DateTime-Werten addiert oder von ihnen abgezogen werden und es ergibt sich wieder ein DateTime-Wert. Sie können aber auch miteinander addiert, voneinander subtrahiert, mit einer Zahl multipliziert oder durch eine dividiert werden, es ergibt sich immer wieder ein Intervall.
Beispiel:
SQL> CREATE TABLE diff (
2 col1 INTERVAL YEAR TO MONTH,
3 col2 INTERVAL DAY TO SECOND);
SQL> INSERT INTO diff VALUES (
'7-9', '18 14:29:39.98765');
SQL> SELECT * FROM diff;
COL1 COL2
--------------- --------------------
+07-09 +18 14:29:39.987650
Neue Datums- und Konvertierungsfunktionen
Die nachfolgende Tabelle listet die neuen Funktionen auf, die gemeinsam mit den neuen Datentypen eingeführt wurden:
CURRENT_DATE
CURRENT_TIMESTAMP
LOCALTIMESTAMP
DBTIMEZONE
SESSIONTIMEZONE
TZ_OFFSET
(SESSIONTIMEZONE |
DBTIMEZONE |Zonenname
| <offset>)
FROM_TZ (timestamp_wert, timezone_wert)
TO_TIMESTAMP (char[, format[, nlsparam]])
TO_TIMESTAMP_TZ (char[, format[, nlsparam]])
TO_DSINTERVAL (char[, nlsparam])
TO_YMINTERVAL (char)
gibt aktuelles Datum der Session als Datentyp DATE zurück (entspricht SYSDATE)
gibt aktuelles Datum und Uhrzeit der Session als Datentyp TIMESTAMP WITH TIME ZONE zurück
gibt aktuelles Datum und Uhrzeit der Session als Datentyp TIMESTAMP zurück
gibt die Zeitzone der Datenbank zurück
gibt die Zeitzone der Session zurück
gibt die Differenz der Zeitzone im Vergleich zur aktuellen Zeit zurück
wandelt einen TIMESTAMP-Wert in einen TIMESTAMP WITH TIME ZONE-Wert um
wandelt einen String in einen TIMESTAMP um; optional kann ein Formatstring angegeben werden
wandelt einen String in einen TIMESTAMP WITH TIME ZONE um; optional: Formatstring
wandelt einen String in ein INTERVAL DAY TO SECOND um
wandelt einen String in ein INTERVAL YEAR TO MONTH um
Neue vordefinierte Objekttypen
Die neuen Oracle-definierten Objekttypen lauten wie folgt:
Hinweis: Für Any-Typen gibt es vordefinierte Schnittstellen für PL/SQL und OCI.
Neue LOB-Features
Ab Version 9i stehen drei neue LOB-Features zur Verfügung:
Beispiel:
SQL> CREATE TABLE articles (id NUMBER NOT NULL,
description LONG NOT NULL);
SQL> ALTER TABLE articles MODIFY (description CLOB);
Hinweis: Da zwei LONG-Spalten innerhalb einer Tabelle nicht zulässig sind, kann eine neue LONG- bzw. LONG RAW-Spalte erst nachträglich eingefügt werden.
SQL> ALTER TABLE articles ADD (picture LONG RAW);
Beispiele:
SQL> SELECT id, description
2 FROM articles
3 WHERE description LIKE '%fga%';
SQL> SELECT substr(description,3,2)
2 FROM articles;
Unterstützung von UNICODE
NCHAR, NVARCHAR und NCLOB haben nun grundsätzlich das UNICODE-Format, da für den NATIONAL CHARACTER SET nur noch UNICODE-Zeichensätze zulässig sind.
String-Funktionen können mit jeder beliebigen Kombination aus CHAR/ VARCHAR2/ NCHAR/ NVARCHAR2 umgehen, auch innerhalb ein und derselben Funktion.
Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.