Till att börja med använder vissa standardfunktioner i Oracle Typer, till exempel XMLDB och Spatial (som inkluderar deklarering av kolumner med kapslade tabelldatatyper).
Dessutom använder många PL/SQL-utvecklare typer hela tiden, för att deklarera PL/SQL-samlingar eller pipeline-funktioner.
Men jag håller med om att få ställen använder Typer i stor utsträckning och bygger PL/SQL API:er av dem. Det finns flera anledningar till detta.
- Oracle har implementerat objekt väldigt långsamt. Även om de introducerades i version 8.0 var det inte förrän 9.2 som de fullt ut stödde arv, polymorfism och användardefinierade konstruktorer. Korrekt objektorienterad programmering är omöjligt utan dessa funktioner. Vi fick inte
SUPER()
till version 11g. Även nu saknas funktioner, framför allt de privata deklarationerna i TYP BODY. - Syntaxen är ofta klumpig eller frustrerande obskyr. Dokumentationen hjälper inte.
- De flesta som arbetar med Oracle tenderar att komma från den relationella/processmässiga skolan för programmering. Detta betyder att de tenderar att inte förstå OOP, eller att de inte förstår var det kan vara användbart i databasprogrammering. Även när folk kommer på en bra idé tycker de att det är svårt eller omöjligt att implementera med Oracles syntax.
Den sista punkten är nyckeln. Vi kan lära oss ny syntax, vi kan övertala Oracle att slutföra funktionsuppsättningen, men det är bara värt besväret om vi kan komma på en användning för Types. Det betyder att vi behöver problem som kan lösas med arv och polymorfism.
Jag har arbetat på ett system som använde typer i stor utsträckning. Det var ett datalagersystem och undersystemet för dataladdning byggdes av Typer. Den underliggande motiveringen var enkel:
- vi måste använda samma affärsregelmall för varje tabell vi laddar, så processen är generisk;
- varje tabell har sin egen projektion, så SQL-satserna är unika för var och en.
Typimplementeringen är ren:den generiska processen definieras i en Type; implementeringen för varje tabell definieras i en typ som ärver från den generiska typen. De specifika typerna kan genereras från metadata. Jag presenterade detta ämne på UKOUG för några år sedan, och jag har skrivit upp det mer i detalj på min blogg.Ta reda på mer.
Relationell teori inkluderar förresten konceptet Domains, som är användardefinierade datatyper, inklusive begränsningar, etc. Ingen variant av RDBMS stöder faktiskt Domains men Oracles Type Implementation är definitivt ett steg på vägen.