DISTINCT Datentyp
Sie zählen neben den strukturierten Datentypen zu den benutzerdefinierten Datentypen. Sie sind im Grunde Kopien eines beliebigen Basis-? oder benuzterdefinierten Datentyps. Sinn und Zweck dieser DISTINCT-Datentypen ist es, semantisch sinnlose Verlgeiche, Berechnungen und Zuweisungen auszuschließen. Zu diesem Zweck, sind nur Vergleiche von Instanzen gleicher DISTINCT-Datentypen möglich, womit sie dem Prinzip der strengen Typisierung genügen. Weder ist der Vergleich einer Instanz eines DISTINCT-Datentyps mit einer Instanz seines Quelldatentyps zugelassen, noch Vergleiche von Instanzen verschiedener DISTINCT-Typen. Hingegen werden zwei Instanzen gleichen DISTINCT-Typs verglichen, indem DBS-intern der Vergleich auf dem zugrunde liegenden Quelldatentyp augeführt wird.
Bei der Erstellung eines DISTINCT-Datentyps wird automatisch ein Konstuktor generiert. Durch Aufruf als distinct-Typname(Quelltypwert) wird eine Instanz des DISTINCT-Typs erzeugt. Ferner werden bei der Erstellung zwei CAST-Funktionen erzeugt, die die Instanz eines DISTINCT-Typs in eine Instanz eines Quelltyps transformieren und umgekehrt. Der Aufruf erfolgt als CAST(Werteausdruck AS Zieltypname).
Eine Bildung von Subtypen für DISTICT-Typen ist nicht möglich, was durch die Klausel FINAL deutlich wird, die zwar optional ist, aber auch die Default-Einstellung.
Die DISTICT-Datentypen sind nur im SQL-Standard bekannt, nicht bei Oracle.
SQL-Syntax für DISTINCT-Datentypen:
<CREATE DISTINCT-Datentyp Anweisung> ::=
CREATE TYPE distinct-Typname AS Quelltypname [ FINAL ];
Beispiele:
CREATE TYPE euroTyp AS DECIMAL(20,2) FINAL; CREATE TYPE Montasgehalt_Typ AS DECIMAL(7,2) FINAL; CREATE TYPE Jahresgehalt_Typ AS DECIMAL(10,2) FINAL; CREATE TYPE TelefonTyp AS VARCHAR(15) FINAL; CREATE TYPE PLZTyp AS VARCHAR(5) FINAL; -- Variablendeklaration DECLARE TelefonPrivat TelefonTyp; DECLARE TelefonArbeit TelefonTyp; DECLARE TelefonHandy VARCHAR(15); SET TelefonPrivat = TelefonTyp('02261819689833'); -- initialisieren mit 022618196989833 SET TelefonArbeit = TelefonTyp('02261734979834'); -- initialisieren mit 02261734979834 IF TelefonArbeit = TelefonPrivat THEN ...; -- ausführbarer Vergleich dank passender/gleicher Typen der Operanden IF TelefonArbeit = TelefonHandy THEN ...; -- ein Typkonflikt bei den Operanden tritt auf
Quellen:
- ANSI/ISO/IEC 9075-1:2003. Part 1 "SQL/Framework", ISO International Organization for Standardization / ANSI American National Standards Institute, September 2003
- ANSI/ISO/IEC 9075-2:2003. Part 2 "SQL/Foundation", ISO International Organization for Standardization / ANSI American National Standards Institute, Dezember 2003
- Türker, Can/Saake, Gunter: "Objektrelationale Datenbanken", dpunkt-verlag, Heidelberg, 2006, ISBN 3-89864-190-2
Kategorien: Objektrelationale DB, D