Az objektum típus tehát két részből, a specifikációs és az implementációs részből áll. A specifikációs részben kell felsorolni az attribútumokat és metódusokat. Az attribútumok deklarációjának meg kell előznie a metódusokét.
A PL/SQL belső adattípusai:Minden attribútumnak azonos a láthatósága. Kívülről is láthatóak és elérhetőek. (A C++-ban ennek a public láthatóság felel meg) Tehát az adatelrejtést (information hiding) nem támogatja a nyelv.
A metódusok lehetnek osztály, illetve objektum szintűek. Előbbiek deklarációját a STATIC, utóbbiakét a MEMBER kulcsszónak kell megelőznie. A metódusok neve nem egyezhet meg sem a típus sem egyetlen attribútum nevével sem. A paraméterek és a függvények visszatérési értékének típusára ugyanazon korlátozások vonatkoznak, mint az attribútumok esetében. Az objektum szintű metódusok rendelkeznek egy implicit paraméterrel, ez a SELF. A SELF az az objektum, amelyhez a metódus tartozik. Ezért ez egy objektum típusú paraméter. Meg lehet adni explicit módon is. Ekkor függvény esetén csak IN módú, eljárás esetén IN OUT módú lehet. OUT módú paraméter soha nem lehet.
Példa: Készítsük el a complex számok típusát!
A Map és Order metódusok
Tulajdonképpen ezek nem is metódusok, hanem az objektum szintű függvényeket speciális tulajdonsággal felruházó eszközök.
Miről is van itt szó tulajdonképpen? Az Oracle automatikusan bizosít számunkra egyenlőségvizsgálatot az azonos típusú objektumok között.
Két objektumot akkor tekint egyenlőnek, ha a megfelelő attribútumaik egyenlők. Igen ám, de mint tudjuk az objektumok akár adatbáziselemek is lehetnek
és szerepelhetnek például egy lekérdezés order by részében. Ehhez az kell, hogy az objektumok halmazán értelmezve legyen egy rendezési reláció.
Ránk hárul a feladat, hogy ezt a relációt (függvényt) elkészítsük. Persze ez nem kötelező, de ha a nyelv lehetőséget ad rá miért ne használnánk ki.
Ezzel vissza is érkeztünk a map és az order kulcsszavak jelentéséhez. Alakítsuk át a fenti példában szereplő hossz() metódus specifikációját a következőképpen:
A PL/SQL mostantól automatikusan fel fogja használni a hossz() függvényt, hogy az x < y típusú logikai kifejezéseket kiértékelje illetve a distinct,
group by vagy order by résszel rendelkező SQL lekérdezéseket kezelje.
A map metódus visszatérési értékének típusa csak DATE, NUMBER, VARCHAR2 vagy ANSI SQL típus lehet.
Az order jelentése hasonló. De az order metódus a self paraméteren kívül kap még egy explicit objektum típusú paramétert is.
A függvény a paraméterekben kapott két objektumról dönti el, hogy melyik a nagyobb. Az eredeti Komplex típust most egy másik függvénnyel bővítjük ki:
Ha a függvény valamelyik paramétere NULL, akkor a visszatérési értéke is NULL;
Az order és map metódusok kizárják egymást és mindegyikből legfeljebb egy lehet.
Konstruktor
Minden Objektum típushoz automatikusan generálódik egy alapértelmezett konstruktor, amelynek visszatérési értéke a típus egy példánya. A konstruktor neve megegyezik az Objektum típus nevével, paraméterlistáját pedig, a típus attribútumai adják a deklarációjuk sorrendjében. Lehetőség van a konstruktor túlterhelésére és felülírására is. Az objektum létrehozásakor explicit módon kell meghívni a konstruktort. Implicit konstruktor hívás a PL/SQL-ben nincs. Objektum típust létrehozni kizárólag SQL*Plus-ból a Create type SQL utasítással lehet. PL/SQL blokkban, csomagban és alprogramban nem megengedett.
A PL/SQL az egyszerű öröklődést támogatja, azaz egy Objektum típusnak legfeljebb egy szupertípusa lehet.
Az altípus örökli a szülőtől az attribútumokat és metódusokat. Ezeken felül még újabbakat definiálhat. (Mind attribútumot mind metódust.)