Ein einzigartiger Datentyp ist ein benutzerdefinierter Datentyp, der seine interne Darstellung mit einem vorhandenen Datentyp (seinem "Quellentyp") gemeinsam benutzt, jedoch für die meisten Operationen als separater und inkompatibler Datentyp gilt. Beispielsweise könnten Sie einen Datentyp für das Alter, einen Datentyp für das Gewicht und einen Datentyp für die Größe definieren, die alle eine relativ unterschiedliche Semantik aufweisen, aber den integrierten Datentyp INTEGER zur internen Darstellung verwenden.
Das folgende Beispiel veranschaulicht die Erstellung eines einzigartigen Datentyps namens PAY:
CREATE DISTINCT TYPE PAY AS DECIMAL(9,2) WITH COMPARISONS
Obwohl PAY dieselbe Darstellung wie der integrierte Datentyp DECIMAL(9,2) besitzt, wird er als separater Datentyp betrachtet, der weder mit DECIMAL(9,2) noch mit einem anderen Datentyp vergleichbar ist. Er ist nur mit demselben einzigartigen Datentyp vergleichbar. Auch Operatoren und Funktionen, die für den Datentyp DECIMAL verwendet werden können, können auf diesen Datentyp nicht angewendet werden. Ein Wert mit dem Datentyp PAY kann beispielsweise nicht mit einem Wert des Typs INTEGER multipliziert werden. Daher müssen Sie Funktionen schreiben, die nur auf den Datentyp PAY angewendet werden.
Die Verwendung von einzigartigen Datentypen reduziert das Auftreten versehentlicher Fehler. Wurde beispielsweise die Spalte SALARY der Tabelle EMPLOYEE als Datentyp PAY definiert, ist eine Addition zur Spalte COMM selbst dann nicht möglich, wenn beide denselben Quellentyp haben.
Einzigartige Datentypen unterstützen die Datenumsetzung. Ein Quellentyp kann in einen einzigartigen Datentyp und ein einzigartiger Datentyp kann in einen Quellentyp umgesetzt werden. Wurde beispielsweise die Spalte SALARY der Tabelle EMPLOYEE als Datentyp PAY definiert, würde das folgende Beispiel beim Vergleichsoperator nicht fehlschlagen.
SELECT * FROM EMPLOYEE WHERE DECIMAL(SALARY) = 41250
DECIMAL(SALARY) gibt einen Dezimaldatentyp zurück. Umgekehrt kann ein numerischer Datentyp in einen Datentyp PAY umgesetzt werden. Sie können beispielsweise die Zahl 41250 durch die Verwendung von PAY(41250) umsetzen.