Pro začátek některé standardní funkce Oracle používají typy, například XMLDB a Spatial (což zahrnuje deklarování sloupců datových typů Nested Table).
Mnoho vývojářů PL/SQL také neustále používá typy pro deklarování kolekcí PL/SQL nebo zřetězených funkcí.
Souhlasím však, že jen málo míst hojně používá typy a vytváří z nich PL/SQL API. Existuje pro to několik důvodů.
- Oracle implementoval objekty velmi pomalu. Přestože byly představeny ve verzi 8.0, plně podporovaly dědičnost, polymorfismus a uživatelem definované konstruktory až ve verzi 9.2. Správné objektově orientované programování je bez těchto funkcí nemožné. Nedostali jsme
SUPER()
do verze 11g. Dokonce i nyní chybí funkce, zejména soukromé deklarace v TYPE BODY. - Syntaxe je často neohrabaná nebo frustrujícím způsobem nejasná. Dokumentace nepomůže.
- Většina lidí pracujících s Oracle většinou pochází z relační/procedurální školy programování. To znamená, že mají tendenci nerozumět OOP nebo nerozumí tomu, kde to může být užitečné při programování databází. I když lidé přijdou s úhledným nápadem, je pro ně obtížné nebo nemožné implementovat pomocí syntaxe Oracle.
Ten poslední bod je klíčový. Můžeme se naučit novou syntaxi, můžeme přesvědčit Oracle, aby dokončil sadu funkcí, ale vyplatí se to pouze tehdy, pokud dokážeme přijít s využitím pro Types. To znamená, že potřebujeme problémy, které lze vyřešit pomocí dědičnosti a polymorfismu.
Pracoval jsem na jednom systému, který široce používal typy. Byl to systém datového skladu a subsystém pro načítání dat byl postaven z typů. Základní zdůvodnění bylo jednoduché:
- musíme použít stejnou šablonu obchodních pravidel pro každou tabulku, kterou načteme, takže proces je obecný;
- každá tabulka má svou vlastní projekci, takže příkazy SQL jsou pro každou z nich jedinečné.
Implementace typu je čistá:generický proces je definován v typu; implementace pro každou tabulku je definována v typu, který dědí z tohoto generického typu. Konkrétní typy lze generovat z metadat. Na toto téma jsem před pár lety prezentoval na UKOUG a podrobněji jsem to rozepsal na svém blogu.Další informace
Mimochodem, relační teorie zahrnuje koncept domén, což jsou uživatelem definované datové typy, včetně omezení atd. Žádná varianta RDBMS ve skutečnosti nepodporuje domény, ale implementace typů od Oracle je rozhodně krokem na cestě.