En DISTINCT-type er en brugerdefineret type, som har samme interne repræsentation som en eksisterende type (dens "kildetype") men betragtes som selvstændig og ikke-kompatibel i forbindelse med de fleste funktioner. Du kan f.eks. definere typer for alder, vægt og højde, som jo alle er forskellige, men som bruger den indbyggede datatype INTEGER (heltal) til deres interne repræsentationer.
Følgende eksempel viser, hvordan en DISTINCT-type ved navn PAY oprettes:
CREATE DISTINCT TYPE PAY AS DECIMAL(9,2) WITH COMPARISONS
Selv om PAY har samme repræsentation som den indbyggede datatype DECIMAL(9,2), betragtes den som en selvstændig type, der ikke kan sammenlignes med DECIMAL(9,2) eller nogen anden type. Den kan kun sammenlignes med samme DISTINCT-type. Operatorer og funktioner, som fungerer sammen med DECIMAL, kan heller ikke bruges her. Således kan en PAY-værdi ikke ganges med en INTEGER-værdi. Du skal derfor skrive funktioner, som kun gælder for datatypen PAY.
Hvis du bruger DISTINCT-datatyper, mindskes risikoen for fejltagelser. Hvis kolonnen SALARY i tabellen EMPLOYEE er defineret til datatypen PAY, kan den ikke lægges sammen med COMM, selv om de har samme kildetype.
DISTINCT-datatyper tillader konvertering. En kildetype kan konverteres til en DISTINCT-datatype og omvendt. Hvis kolonnen SALARY i tabellen EMPLOYEE er defineret til datatypen PAY, kan følgende eksempel udføres uden fejl af sammenligningsoperatoren.
SELECT * FROM EMPLOYEE WHERE DECIMAL(SALARY) = 41250
DECIMAL(SALARY) returnerer datatype DECIMAL. Omvendt kan en numerisk datatype konverteres til typen PAY. Du kan f.eks. konvertere tallet 41250 vha. PAY(41250).