Un tip obiect se poate gestiona în SQL*Plus sau SQL Developer. In blocuri, proceduri, pachete, se poate face gestiunea unui tip obiect numai cu instrucţiunea execute immediate sau cu pachetul DBMS_SQL.
Sintaxa de definire a tipului obiect este:
CREATE [OR REPLACE] TYPE nume {IS | AS} OBJECT [UNDER nume_parinte] (
nume_atribut tip_data [, nume_atribut tip_data] ...
[{MAP | ORDER} MEMBER def_functie,]
[MEMBER {def_functie | def_procedura}
[, MEMBER {def_functie | def_procedura}] ...]
);
CREATE [OR REPLACE] TYPE nume {IS | AS} OBJECT [UNDER nume_parinte] (
nume_atribut tip_data [, nume_atribut tip_data] ...
[CONSTRUCTOR function nume([lista_parametri]) return SELF AS RESULT,]
[{MAP | ORDER} MEMBER def_functie,]
[[{FINAL | OVERRIDING | NOT INSTANTIABLE}] MEMBER {def_functie | def_procedura}
[, [{FINAL | OVERRIDING | NOT INSTANTIABLE}] MEMBER {def_functie | def_procedura}] ...]
) [{FINAL | NOT FINAL}][{INSTANTIABLE | NOT INSTANTIABLE}];
CREATE [OR REPLACE] TYPE BODY nume {IS | AS}
implementare metode definite in partea de specificatii
END;
DROP TYPE nume;
CREATE INDEX i_dept_addr1
ON department_loc (dept_addr.city);
CREATE TABLE movement (
idno NUMBER,
old_office location_typ,
new_office location_typ );
CREATE TRIGGER trigger1
BEFORE UPDATE
OF office_loc
ON office_tab
FOR EACH ROW
WHEN (new.office_loc.city = 'Redwood Shores')
BEGIN
IF :new.office_loc.building_no = 600 THEN
INSERT INTO movement (idno, old_office, new_office)
VALUES (:old.occupant.idno, :old.office_loc, :new.office_loc);
END IF;
END;/