Laborator3_BDOO_master.pdf

download Laborator3_BDOO_master.pdf

of 21

Transcript of Laborator3_BDOO_master.pdf

  • 7/26/2019 Laborator3_BDOO_master.pdf

    1/21

    Sisteme de gestiune a bazelor de date orientate obiect Master IDLaborator 3

    CuprinsI. Motenirea tipurilor........................................................................................................................ 1

    I.1 Tipuri i subtipuri...................................................................................................................... 1I.2 Motenirea, suprancrcarea i suprascrierea metodelor......................................................... 4I.3 Substituirea tipurilor n ierarhia de tipuri ................................................................................... 6I.4 Comparaiile ntr-o ierarhie de tipuri ....................................................................................... 10

    II. Gestiunea obiectelor n Oracle.................................................................................................... 11II.1 Modificarea dinamic a tipurilor............................................................................................. 11II.2 ComandaALTER TYPE........................................................................................................ 12II.3 Opiunile comenziiALTER TABLE pentru modificarea tipurilor.............................................. 13

    Algoritm pentru modificarea unui tip obiect.............................................................................. 14III. Eliminarea tipurilor obiect ........................................................................................................ 14IV. Dependene i tipuri incomplete................................................................................................. 15V. Tipuri generice i tranzitorii ......................................................................................................... 17

    VI. Stocarea obiectelor.................................................................................................................... 18VII. Funcii i predicate utile ............................................................................................................ 19

    I. Motenirea tipurilor

    Cu ajutorul obiectelor, pe lng entiti izolate, se pot defini tipuri specializate de entiti,organizate ntr-o ierarhiede tipuri ce deriv dintr-un tip printe. Astfel, operaiile se pot executaasupra ntregii ierarhii sau difereniat, asupra fiecrui tip din ierarhie, n funcie de nivelul despecializare pe care l implementeaz. Subtipurile dintr-o ierarhie sunt conectate cu supertipurile lor prin motenire, acest lucrunsemnnd c subtipurile primesc automat atributele i metodele tipului printe. De asemenea,subtipurile reflect automat orice schimbare asupra atributelor sau metodelor din cadrul tipuluiprinte, acest fapt definindproprietatea de propagare automat a schimbrilor. Un subtip devine o versiune specializat a tipului printe prin adugarea de noi atribute imetode celor motenite de la printe sau/i prin redefinirea metodelor motenite. Polimorfismuleste proprietatea unei variabile sau coloane obiectuale de a conine o valoare detipul declarat sau de orice subtip al tipului declarat.

    I.1 Tipuri i subtipuri

    Un subtip poate fi derivat dintr-un supertip n mod direct sau indirect, prin intermediul mai multorniveluri de extindere. Dintr-un supertip se pot deriva mai multe subtipuri, dar un subtip poate fi derivat n mod directdintr-un singur supertip. Cu alte cuvinte, sistemul Oracle permite doar implementarea moteniriisimpl, nu i a celei multiple. Ceea ce face un subtip special i l distinge de supertipul printe este o schimbare asuprastructurii motenite de la tipul printe (modificarea sau adugarea de atribute sau metode).

    Un subtip se poate specializa utiliznd una dintre urmtoarele modaliti:o adugarea de noi atribute sau metode;o schimbarea implementrii unei metode pe care subtipul o motenete de la tipul printe,

    astfel nct versiunea de subtip s execute un alt cod dect printele su. Un tip poate avea mai multe subtipuri, iar acestea pot avea la rndul lor subtipuri. Un subtipmotenete toate atributele i metodele tipului printe direct (declarate sau motenite). Pentru a

  • 7/26/2019 Laborator3_BDOO_master.pdf

    2/21

    2

    defini un subtip se utilizeaz comanda CREATE TYPE specificnd n clauza UNDER printeledirect al subtipului.

    1. a) S se defineasc un tip obiect, t_persoana, care s reprezinte un model de date pentruinformaiile legate de o persoan. Tipul t_persoana trebuie s permit definirea ulterioar desubtipuri.CREATE OR REPLACE TYPE t _per soana AS OBJ ECT (cod NUMBER,nume VARCHAR2( 50) )NOT FI NAL;

    /

    b) S se modifice tipul anterior astfel nct s devin un tip final.ALTER TYPE t _per soana FI NAL;

    Obs: Pe parcursul acestui laborator, unele dintre exerciii se refer la urmtoarea ierarhie de tipuri:

    2.S se defineasc tipul t_angajat_permanentcare specializeaz tipul t_persoana. Este posibil?Dac nu, facei modificrile necesare.Obs: Deoarece t_angajat_permanent este un subtip al tipului t_persoana creat anterior, elmotenete atributele codi nume.CREATE OR REPLACE TYPE t _angaj at _per manent UNDER t _per soana ( f unct i e VARCHAR2(30) , dat a_angaj ar i i DATE) ;/

    3.a) S se defineasc un subtip nefinal, t_colaborator_extern, al tipului t_persoana.CREATE OR REPLACE TYPE t _col abor at or _ext er n UNDER t _persoana (ocupat i e VARCHAR2(30) ,

    descr i ere VARCHAR2(200) )NOT FI NAL;

    b) S se creeze un subtip, t_stagiar, al tipului t_colaborator_extern definit anterior. Pe lngatributele motenite de la tipul t_colaborator_extern, acesta declar dou noi atribute, an_studiuifacultate.Afiai toate atributele tipului nou creat.CREATE TYPE t _s t agi ar UNDER t _col aborator_ext ern ( an_st udi u NUMBER( 1) , f acul t ate VARCHAR2( 30) ) ;

    /SQL> desc t _s t agi ar

    t_persoana

    t_angajat_permanent t_colaborator_extern

    t_stagiar

  • 7/26/2019 Laborator3_BDOO_master.pdf

    3/21

    3

    Un tip este declarat neinstaniabil utiliznd clauza NOT INSTANTIABLE. Un tip neinstaniabil esteun fel de container. Dac tipul nu este instaniabil, el nu are constructor (nici implicit, nici definit de utilizator) i nu sepot crea instane ale tipului respectiv.

    n limbajul Java, noiunea corespondent este cea de clas abstract. Aceast opiune este util atunci cnd dou entiti au atribute comune care pot fi implementaten cadrul unui tip printeal unei ierarhii, dar aceste atribute nu sunt suficiente pentru instaniereade obiecte.

    4. a) Utiliznd tipuri obiect, s se reprezinte dou categorii de piese (rotund i dreptunghiular)caracterizate de un nucleu de atribute i metode comune.CREATE TYPE t _pi esa AS OBJ ECT ( cod NUMBER, t i p VARCHAR2( 10) ,NOT I NSTANTI ABLE MEMBER FUNCTI ON supr af at a RETURN NUMBER)

    NOT I NSTANTI ABLE

    NOT FI NAL;/CREATE TYPE t _pi esa_r ot unda UNDER t _pi esa ( di amet r u NUMBER, OVERRI DI NG MEMBER FUNCTI ON supr af at a RETURN NUMBER) ;/CREATE TYPE t _pi esa_drept unghi ul ar a UNDER t _pi esa ( l at i me NUMBER, l ungi me NUMBER, OVERRI DI NG MEMBER FUNCTI ON supr af at a RETURN NUMBER) ;/

    b)Implementai funcia suprafatan cele dou subtipuri. c) Scriei un bloc PL/SQL prin care : -ncercai s instaniai un obiect de tip t_piesa -instaniai cte un obiect de tip t_piesa_rotunda, t_piesa_dreptunghiulara utiliznd dimensiun iintroduse de utilizator (ACCEPT) ; afiai suprafaa celor dou piese, apelnd metoda membru.

    5. S se defineasc o ierarhie cu tipul rdcin forma_geometricai subtipurile dreptunghii cerc.Tipul printe este nefinal i neinstaniabil, iar subtipurile sale, dreptunghi i cerc, sunt finale.CREATE TYPE f or ma_geomet r i ca AS OBJ ECT (t i p VARCHAR2( 20) ,

    NOT I NSTANTI ABLE MEMBER FUNCTI ON ar i a RETURN NUMBER, NOT I NSTANTI ABLE MEMBER FUNCTI ON per i met r u RETURN NUMBER)

    NOT I NSTANTI ABLENOT FI NAL;/CREATE TYPE dreptunghi UNDER f or ma_geomet r i ca ( l ung NUMBER, l at NUMBER, OVERRI DI NG MEMBER FUNCTI ON ar i a RETURN NUMBER, OVERRI DI NG MEMBER FUNCTI ON per i met r u RETURN NUMBER) ;/CREATE TYPE BODY dr ept unghi AS OVERRI DI NG MEMBER FUNCTI ON ar i a RETURN NUMBER I S BEGI N

    RETURN SELF. l ung * SELF. l at ; END;

  • 7/26/2019 Laborator3_BDOO_master.pdf

    4/21

    4

    OVERRI DI NG MEMBER FUNCTI ON per i met r u RETURN NUMBER I S BEGI N RETURN 2 * ( SELF. l ung + SELF. l at ) ; END;END;/

    SELECT dr ept unghi ( ' PATRULATER' , 20, 10) . ar i a( )FROM DUAL;CREATE TYPE cer c UNDER f or ma_geomet r i ca ( r aza NUMBER, OVERRI DI NG MEMBER FUNCTI ON ar i a RETURN NUMBER, OVERRI DI NG MEMBER FUNCTI ON per i met r u RETURN NUMBER) ;/CREATE OR REPLACE TYPE BODY cer c AS OVERRI DI NG MEMBER FUNCTI ON ar i a RETURN NUMBER I S pi NUMBER : = 3. 1415;

    BEGI N RETURN SELF. r aza * SELF. r aza * pi ; END; OVERRI DI NG MEMBER FUNCTI ON per i met r u RETURN NUMBER I S pi NUMBER : = 3. 1415;

    BEGI N RETURN 2 * SELF. r aza * pi ; END;END;/SELECT cer c( ' CI RCULARA' , 10) . per i met r u( )FROM dual ;

    b) Scriei un bloc PL/SQL prin care (ncercai s) instaniaiun obiect de tipul forma_geometrica.c) Modificai tipulforma_geometrica astfel nct s devin instaniabil i re-executai bloculprecedent.ALTER TYPE t _exempl u I NSTANTI ABLE;

    I.2 Motenirea, suprancrcarea i suprascrierea metodelor

    Un subtip motenete automat toate metodele supertipului su (declarate sau motenite). El poateredefini (suprascrie) metodele motenite i poate aduga metode noi.Un tip poate conine mai multe metode cu acelai nume, dar cu signaturi diferite. n acest caz,compilatorul utilizeaz signaturile metodelor pentru a le deosebi la momentul rulrii.

    Signatura unei metode este un fel de profil structural. Ea const din numele metodei, tipurile iordinea parametrilor formali ai metodei (inclusiv parametrul implicit SELF). Metodele unui tip care auacelai nume i signaturi diferite se numesc suprancrcate.Dotarea unui tip cu mai multe metode (declarate sau motenite) avnd acelai nume estedenumit suprancrcare (overloading). Suprancrcarea este util atunci cnd trebuie s se asiguremai multe implementri ale aceluiai comportament.

    6.Subtipul t_subtipcreeaz o suprancrcare pentruprocedura(). De remarcat c subtipul conineambele versiuni ale procedurii. n funcie de tipul parametrului se apeleaz proceduracorespunztoare.CREATE TYPE t _t i p AS OBJ ECT ( a NUMBER,

    MEMBER PROCEDURE pr ocedur a( x DATE) )NOT FI NAL;

  • 7/26/2019 Laborator3_BDOO_master.pdf

    5/21

    5

    /CREATE OR REPLACE TYPE BODY t _t i p AS MEMBER PROCEDURE pr ocedur a( x DATE) I S BEGI N DBMS_OUTPUT. PUT_LI NE ( SELF. a | | TO_CHAR( x, ' ddmmyyyy' ) ) ; END pr ocedur a;

    END;/CREATE TYPE t _subt i p UNDER t _t i p ( MEMBER PROCEDURE pr ocedur a( x VARCHAR2) ) ;/CREATE OR REPLACE TYPE BODY t _subt i p AS MEMBER PROCEDURE procedur a( x var char 2) I S BEGI N DBMS_OUTPUT. PUT_LI NE ( SELF. a | | x) ; END;END;/SET SERVEROUTPUT ONDECLAREv t _ t i p : = t _ t i p ( 1) ;

    w t _subt i p : = t _subt i p ( 2) ;BEGI N v. procedur a (SYSDATE) ;- - v_pr ocedur a ( ' t ext ' ) ; - - i ncor ect , gener eaza er oar e

    w. procedura (SYSDATE) ; w. pr ocedur a (' t ext ' ) ;END;/

    Redefinirea unei metode motenite pentru a-i particulariza comportamentul ntr-un subtip senumete suprascriere (overriding). Pentru a semnala c o metod este suprascris, se utilizeazcuvntul cheie OVERRIDING n cadrul definiiei tipului i a corpului acestuia.

    7.Tipul forma_geometricapoate conine o metod afiseaza(). Aceasta va fi suprancrcat n cadrulsubtipului dreptunghiastfel nct s primeasc i s afieze un parametru de tip ir de caractere,p_notatie. Se va adauga noua metodn cadrul tipului forma_geometrica, i se va da o implementarefr parametri i apoi va fi suprancrcat n subtipul dreptunghi. Testai metoda de afiare.ALTER TYPE f or ma_geomet r i ca ADD MEMBER PROCEDURE af i seazaCASCADE;

    CREATE TYPE BODY f or ma_geomet r i ca AS MEMBER PROCEDURE af i seaza I S BEGI N DBMS_OUTPUT. PUT_LI NE ( ' Forma geomet r i ca de t i p: '

    | | SELF. t i p) ; END;END;/ALTER TYPE dr ept unghi ADD MEMBER PROCEDURE af i seaza( p_not at i e VARCHAR2) ;CREATE OR REPLACE TYPE BODY dr ept unghi AS OVERRI DI NG MEMBER FUNCTI ON ar i a RETURN NUMBER I S

    BEGI N RETURN SELF. l ung * SELF. l at ;

  • 7/26/2019 Laborator3_BDOO_master.pdf

    6/21

    6

    END; OVERRI DI NG MEMBER FUNCTI ON per i met r u RETURN NUMBER I S BEGI N RETURN 2 * ( SELF. l ung + SELF. l at ) ; END; - - pana ai ci ni mi c schi mbat

    MEMBER PROCEDURE af i seaza( p_not at i e VARCHAR2) I S BEGI N SELF. af i seaza( ) ; DBMS_OUTPUT. PUT_LI NE( ' Not at i a: ' | | p_not at i e) ; DBMS_OUTPUT. PUT_LI NE( ' ** **** ** *' ) ; DBMS_OUTPUT. PUT_LI NE( ' * *' ) ; DBMS_OUTPUT. PUT_LI NE( ' ******** *' ) ;

    END;END;/DECLARE v_drept unghi dr ept unghi : = dr ept unghi ( ' PATRULATER' , 20, 10) ;BEGI N DBMS_OUTPUT. PUT_LI NE( ' *Met oda ' ' af i seaza' ' di n super t i p. *' ) ; v_dr ept unghi . af i seaza; DBMS_OUTPUT. PUT_LI NE( ' *Met oda ' ' af i seaza' ' di n subt i p. . . *' ) ; v_dr ept unghi . af i seaza( ' ABCD' ) ;END;/

    I.3 Substituirea tipurilor n ierarhia de tipuri

    ntr-o ierarhie de tipuri, subtipurile reprezint diferite variante ale tipului rdcin. De exemplu,

    tipurile t_angajat_permanent i t_colaborator_extern definite anterior sunt variante ale tipuluit_persoana. Tipul de baz include subtipurile, n sensul c orice angajat sau colaborator este opersoan. sunt necesare mecanisme pentru a face referin la diferite niveluri de specializare, fie la cel maigeneral nivel (de exemplu, s se selecteze sau s se modifice toate persoanele), fie la niveluriparticulare (de exemplu, s se selecteze sau modifice doar colaboratorii sau doar persoanele carenu sunt colaboratori).

    Proprietatea de polimorfism permite selectarea tuturor obiectelor de un anumit tip (de exemplut_persoana) i obinerea att a obiectelor de tipul respectiv (t_persoana), ct i a obiectelor al crortip declarat este un subtip al acestui tip (t_angajat_permanent, t_colaborator_externsau t_stagiar).Aceast proprietate se numete substituibilitate.

    Dac un supertip este substituibil, atunci variabilele, coloanele i atributele de acel tip pot conineatt obiecte de tipul respectiv, ct i instane obiect corespunztoare subtipurilor acestuia.

    Supertipurile sunt substituibile deoarece un subtip este doar o variant specializat asupertipurilor sale (directe sau indirecte). Substituibilitatea se aplic la atribute, coloane i linii obiect (din vizualizri sau tabele obiect),colecii sau referine ctre obiecte. Atributele obiectelor, elementele coleciilor i referinele suntntotdeauna substituibile. Dac teste un tip obiect, atunci:

    o un atribut substituibil de tip referin ctre un obiect de tip tpoate conine referine attctre o instan a tipului t, ct i ctre o instan a unui subtip al tipului t;

    o un atribut de tipul t poate conine att instane obiect de tip t, ct i instane ale unuisubtip al tipului t;

    o o colecie de elemente de tip tpoate conine att instane obiect de tip t, ct i instaneale oricrui subtip corespunztor tipului t.

  • 7/26/2019 Laborator3_BDOO_master.pdf

    7/21

    7

    Exist posibilitatea de a activa sau dezactiva substituibilitatea la nivel de stocare pentru anumitecoloane sau tabele obiect.

    8. a) S se defineasc tipul t_proiect_externn care atributul responsabils fie substituibil.CREATE TYPE t _proi ect _ext ern AS OBJ ECT ( denumi r e VARCHAR2( 30) , responsabi l t _per soana) ;/Obs : O instan a tipului t_proiect_extern conine denumirea i responsabilul, care este de tipt_persoanasau de orice alt subtip al tipului t_persoana.

    b) S se specifice un proiect extern avnd un responsabil de tip t_angajat_permanent:

    SELECT t _pr oi ect _ext er n( ' I mpl ement ar ea car act er i st i ci l or obi ect ual e' ,t _angaj at _per manent ( 12345, ' I van' , ' i ngi ner ' , SYSDATE - 120) )

    FROM dual ;

    c) S se specifice un proiect extern avnd un responsabil de tip t_colaborator_extern.

    Coloanele i liniile obiect sunt n mod implicit substituibile. Cu alte cuvinte, o coloan sau linie detip obiect tpoate conine instane ale tipului tsau ale oricruia dintre subtipurile sale.

    9. Se consider ierarhia t_persoana cu subtipurile t_colaborator_extern i t_angajat_permanent.Tipul t_colaborator_externare la rndul lui un subtip t_stagiar.a) S se creeze un tabel obiect de tip t_persoana.b) S se insereze cte o linie din fiecare tip i subtip considerat.Obs : Un tabel obiect de tip t_persoana poate conine linii de tip t_persoana sau de unul dintresubtipurile acestuia. Pentru a introduce un colaborator de un tip dat se utilizeaz, n clauza VALUESa comenzii INSERT, constructorul specific tipului respectiv.

    CREATE TABLE t ab_persoane OF t _per soana;I NSERT I NTO t ab_persoaneVALUES ( t _per soana (15, ' Geor gescu' ) ) ;I NSERT I NTO t ab_persoaneVALUES ( t _col abor at or _ext er n ( 25, ' I r i mi a Vi or el ' , ' anal i st ' , NULL) ) ;I NSERT I NTO t ab_persoaneVALUES ( t _st agi ar ( 35, ' Si mona Popescu' , ' asi st ent ' ,

    NULL, 3, ' I nf or mat i ca' ) ) ;!! Inserai i o linie de tip t_angajat_permanent.

    n mod similar se lucreaz ntr-un tabel sau vizualizare relaional pentru o coloansubtituibil de tip t_persoana.

    10. S se creeze tabelul relaional tab_proiecte_externe i s se insereze informaii despre o

    persoan, un colaborator i un stagiar.CREATE TABLE t ab_proi ect e_exter ne (

    denumi r e VARCHAR2( 50) ,r esponsabi l t _per soana) ;

    I NSERT I NTO t ab_pr oi ecte_ext erneVALUES( ' I nt egr ar e t ehnol ogi e Hi ber nat e' , t _per soana( 15, ' Geor gescu' ) ) ;I NSERT I NTO t ab_pr oi ecte_ext erneVALUES( ' I nt er f at a J ava' , t _col abor at or _ext er n ( 25, ' I van Vi or el ' ,

    ' anal i s t ' , NULL) ) ;I NSERT I NTO t ab_pr oi ecte_ext erneVALUES( ' Gest i une resur se' , t _st agi ar ( 35, ' Si mona Popescu' ,

    ' as i stent ' , NULL, 3, ' I nf ormat i ca' ) ) ;

    !! Inserai i o linie cu responsabil de tip t_angajat_permanent.

  • 7/26/2019 Laborator3_BDOO_master.pdf

    8/21

    8

    n general, atributele pot fi accesate utiliznd notaia cu punct. n cazul atributelor unui subtip altipului declarat, se utilizeaz funcia TREAT.

    11. Printr-o vizualizare obiect viz_proiecte_externe de tip t_proiect_extern (n care coloanaresponsabil conine instane ale oricrui tip din ierarhia cu rdcina t_persoana), s se afiezedenumirile tuturor proiectelor iinformaiile legate numai de responsabiliide tip t_stagiar.Obs: Se poate utiliza funcia TREATmpreun cu predicatul IS OF TYPE (ONLY)I NSERT I NTO t ab_pr oi ecte_ext erneVALUES (' I mpl ement ar ea car act er i st i ci l or obi ect ual e' , t _st agi ar ( 12345,' Gr i gor e Andr ei ' , ' aj ut or pr ogr amat or ' , nul l , 2, ' I nf or mat i ca' ) ) ;CREATE VI EW vi z_proi ect e_ext er ne OF t _proi ect _ext er nWI TH OBJ ECT I DENTI FI ER( denumi r e)AS SELECT * FROM t ab_pr oi ecte_ext erne;SELECT TREAT( r esponsabi l AS t _st agi ar) , denumi r eFROM vi z_pr oi ect e_ext er neWHERE r esponsabi l I S OF TYPE ( ONLY t _s t agi ar ) ;

    Un subtip poate fi stocat n orice tabel sau coloan substituibil asociat supertipurilor sale

    directe sau indirecte, att n cele care exist deja la momentul definirii lui, ct i n cele careurmeaz a fi create. De asemenea, exist posibilitatea ca un subtip s aib un at ribut de tipulsupertipului din care a fost extins. Se creeaz astfel o referin ncruciat care complicmecanismele de tratare a obiectelor.

    12. (ncercai s) adugaitipului t_colaborator_externun nou atribut, sef, de tip t_persoana. Ce seobine ? n ce situaie ar funciona comanda ?

    ALTER TYPE t _col aboratorADD ATTRI BUTE sef t _persoana CASCADE;

    Substituibilitatea unei coloane, a unui atribut specific unui tip i a unei colecii imbricate la orice

    nivel, se poate dezactiva cu ajutorul clauzei NOT SUBSTITUTABLE AT ALL LEVELS.13. S se defineasc un tabel relaional istoric_proiecte, similar tabelului tab_proiecte_externe.Coloana responsabiltrebuie s stocheze doar instane de tip t_persoanai s nu permit instaneale subtipurilor acestui tip.CREATE TABLE i st or i c_proi ect e ( pr oi ect _ext ern VARCHAR2(20) ,r esponsabi l t _per soana,val oar e NUMBER)COLUMN r esponsabi l NOT SUBSTI TUTABLE AT ALL LEVELS;

    n cazul tabelelor obiect, clauza poate fi aplicat ntregului tabel.

    CREATE TABLE t ab_pr oi ecte_per soane OF t _pr oi ect _extern NOT SUBSTI TUTABLE AT ALL LEVELS;

    14. S se defineasc tabelul specializari, specificnd c elementele obiectuale ale coleciei stagiarinu sunt substituibile.CREATE TYPE t _l i st a_st agi ar i AS TABLE OF t _st agi ar ;/CREATE TABLE speci al i zar i (denumi r e VARCHAR2( 10) ,stagi ar i t _ l i st a_stagi ar i )NESTED TABLE st agi ar i NOT SUBSTI TUTABLE AT ALL LEVELSSTORE AS t s_st agi ari ;

    Observaii: Nu exist nici un mecanism pentru dezactivarea substituibilitii coloanelor referin. Clauza de substituibilitate nu poate fi aplicat unui atribut al unui tip obiect.

  • 7/26/2019 Laborator3_BDOO_master.pdf

    9/21

    9

    O coloan trebuie s fie pe nivelul cel mai nalt din ierarhie pentru a i se putea aplicaopiunea NOT SUBSTITUTABLE AT ALL LEVELS.

    Se poate impune o constrngere care s limiteze domeniul tipurilor permise ntr-o coloansau atribut obiect, la un singur subtip din ierarhia de tipuri asociat. Acest lucru se face utiliznd oconstrngere de tip IS OFi cuvntul cheie ONLY.

    Pentru o coloan obiect se poate utiliza att constngerea IS OF, ct i NOTSUBSTITUTABLE AT ALL LEVELS, dar nu ambele.

    15. S se creeze un tabel de tip t_proiect_extern n care responsabilii trebuie s fie de tipt_colaborator_extern. Chiar dac tipul t_proiect_externpermite autori de tip t_persoana, declarareacoloanei impune numai stocarea instanelor obiect de tip t_colaborator_extern.

    CREATE TABLE pr oi ect e_col aborat or i OF t _proi ect _ext er nCOLUMN r esponsabi l I S OF (ONLY t _col aborator _ext ern) ;

    Regulile de atribuire dintre tipuri se aplic n cadrul comenzilor INSERT, UPDATE, clauzeiRETURNING, parametrilor funciilor i variabilelor PL/SQL.

    Aa cum s-a observat, substituibilitatea este proprietatea unui subtip de a nlocui pe unuldintre supertipurile lui ntr-un context dat. La o ncercare de a executa o substituie n alt direcie(substituirea unui subtip cu un supertip al su) apare o eroare de compilare.

    Cnd se atribuie n mod direct unei coloane sau variabile de tip tip_tintao valoare obiect detip tip_sursa, trebuie ndeplinit una dintre situaiile urmtoare:

    tip_sursai tip_tintas aib acelai tip; tip_sursas fie un subtip al tipului tip_tinta -> proces de lrgirewidening(de exemplu,

    atribuirea unei instane de tip t_stagiar la o variabil de tip t_persoana) ; funcioneazatunci cnd atributele suplimentare ale subtipului pot avea valoarea null.

    16. a) Pentru a ilustra atribuirea prin lrgire, se consider urmtorul tabel.

    CREATE TABLE t abel ( per scol t _per soana,s tcol t _st agi ar ,cbcol t _col abor at or _ext er n) ;

    I NSERT I NTO t abel ( per scol , st col , cbcol )VALUES ( t _per soana ( 15, ' Georgescu' ) ,

    t _stagi ar ( 20, ' Pet rescu Mar i a' , ' ref er ent ' , NULL, ' 4' , ' Economi e' ) ,t _col aborat or_ext ern (25, ' I van Vi or el ' , ' as i stent ' , NULL) ) ;

    b) Mai introducei o linie n tabel i vizualizai coninutul acestuia. c) Urmtorul exemplu folosete atribuirea prin lrgire. Instruciunile sunt valide doar dacperscoleste substituibil.

    n SQL:UPDATE t abelSET per scol = st col ;

    n PL/SQL:DECLARE var 1 t _per soana; var 2 t _st agi ar ;BEGI N var 1 : = var 2;END;/

    Dac este necesar o substituire n sensul invers celui obinuit (o valoare de un anumit tip s fieconsiderat de un supertip al tipului declarat), atunci se poate utiliza procesul reciproc, de limitare

  • 7/26/2019 Laborator3_BDOO_master.pdf

    10/21

    10

    (narrowing). Acesta implic tratarea unui obiect de un tip mai general (de exemplu, t_persoana), ca fiind de untip specializat (de exemplu, t_angajat_permanent). Nu toate persoanele sunt angajai permaneni,astfel nct o atribuire n care tipul variabilei int este t_angajat_permanenti tipul obiectului surseste t_persoanafuncioneaz doar dac obiectul respectiv este de tip t_angajat_permanent. Pentru a face o atribuire prin limitare, trebuie utilizat funcia TREATcare convertete n modexplicit valorea surs la tipul specializat al variabilei sau coloanei int. Funcia TREATverific dacschimbarea poate fi fcut, la momentul execuiei, dup care fie realizeaz conversia i returneazo expresie de tipul specificat n opiunea AS, fie returneaz valoarea nulldac valoarea surs nueste de tipul int sau de un subtip al acestuia.

    17. a) S se atribuie coloanei perscol de tip t_persoana valorile coloanei stcol de tip t_stagiar.Pentru fiecare valoare din coloana perscol, atribuirea se face cu succes doar dac persoanarespectiv este artist. n caz contrar, funcia TREATreturneaz valoarea null.

    UPDATE t abelSET st col = TREAT ( per scol AS t _st agi ar ) ;

    b) Urmtoarea comand ncearc s fac o atribuire prin limitare fr a schimba n mod explicit

    tipul valorii surs, ceea ce nu este permis. Comanda va determina apariia erorii ORA-00932.UPDATE t abelSET st col = per scol ;

    n atribuirile expresiilor de tip colecie, tipul elementelor corespunztoare tipului surs i intatrebuie s fie acelai. La nivel de colecie, nu sunt permise nici atribuiri prin lrgire i nici prinlimitare. Evident ns, c atribuirile de la nivelul elementelor unei colecii respect regulile desubstituibilitate prezentate anterior.

    18. S se creeze dou tipuri tablou imbricat cu elemente de tip t_persoana, respectivt_colaborator_extern. Atribuirea dintre dou expresii colecie de tipuri diferite nu este permis, darse poate realiza substituirea la nivel de element (elem2este utilizat n constructorul tipului coleciet_lista_persoane, realizndu-se n acest fel la nivel de element, un proces de lrgire).CREATE TYPE t _l i st a_per soane ASTABLE OF t _persoana;

    /CREATE TYPE t _l i st a_col abor at or i ASTABLE OF t _col aborat or _ext er n;/

    DECLARE var 1 t _l i st a_per soane; var 2 t _l i sta_col abor at or i ; el em1 t _persoana;

    el em2 t _col abor at or ;BEGI N- - var 1 : = var 2; / *NEPERMI S - col ect i i l e nu au acel asi t i p */var 1 : = t _l i st a_per soane ( el em1, el em2) ;/ *PERMI S - el em2 est e de un subt i p al t i pul ui decl ar at */

    END;/

    I.4 Comparaiile ntr-o ierarhie de tipuri

    Dou instane obiect pot fi comparate doar dac au acelai tip sau una are subtipul celeilalte.

    Pentru aceasta sunt folosite metodele de tip MAP i ORDER, care asigur mecanismul decomparare a obiectelor. Dac se definete o metod de comparare, ea este apelat n mod

  • 7/26/2019 Laborator3_BDOO_master.pdf

    11/21

    11

    automat atunci cnd obiecte de acel tip sau de subtipuri ale acestuia trebuie s fie comparate. De asemenea, dou variabile referin pot fi comparate doar dac valorile obiectuale ale acestora

    sunt de acelai tip sau dac una are un subtip al celeilalte. Nu exist nici un mecanism pentru compararea coleciilor luate unitar.

    19.S se defineasc o metod de comparare de tip MAPpentru obiectele de tip t_persoana. S seselecteze din tabelul tab_proiecte_externe denumirile proiectelor, codurile i numele persoanelorcare au rspuns de aceste proiecte. Rezultatul trebuie s apar n ordinea dat de metoda MAPdefinit n cadrul tipului.

    ALTER TYPE t _per soana ADD MAP MEMBER FUNCTI ON map_cod RETURN NUMBER CASCADE;

    CREATE OR REPLACE TYPE BODY t _per soana I S MAP MEMBER FUNCTI ON map_cod RETURN NUMBER I S BEGI N RETURN SELF. cod;

    END map_cod;END;/SELECT denumi r e, t . r esponsabi l . cod, t . r esponsabi l . numeFROM t ab_proi ect e_ext er ne tORDER BY r esponsabi l . map_cod( ) ;

    II. Gestiunea obiectelor n Oracle

    II.1 Modificarea dinamic a tipurilor

    Modificarea dinamic a structurii sau a comportamentului unui tip definit de utilizator este ocaracteristic nou a versiunii Oracle9i i se numete type evolution. Sunt permise urmtoareleschimbri:

    o adugarea sau eliminarea de atribute i metode;o modificarea tipului de date al unui atribut prin mrirea lungimii, a preciziei sau a

    domeniului;o schimbarea proprietilor FINAL sau INSTANTIABLEale tipului.

    Modificrile unui tip afecteaz toate obiectele care sunt n relaie cu el. De exemplu, dac seadaug un atribut unui tip obiect, datele din coloanele de acel tip trebuie s fie afiate astfel nct sinclud noul atribut. Obiectele dependente de un tip sunt acele obiecte ale schemei care refer n mod direct sauindirect tipul respectiv. Ele trebuie s reflecte orice schimbare a acestuia. Atunci cnd un tip este modificat, toate obiectele dependente sunt marcate invalide. Urmtoareareferire a unui obiect invalidat duce la recompilarea acestuia, utiliznd noua definiie a tipuluimodificat. Dac obiectul este recompilat cu succes, atunci el devine valid i poate fi folosit. Ulterior trebuie actualizate datele din tabele, conform noului format. Chiar dac datele sunt stocate n formatul vechi, la fiecare consultare sistemul face conversiactre cel mai recent format. Modul de stocare nu este actualizat pn la actualizarea sau conversiaexplicit a datelor respective.

    Definiia cea mai recent a unui tip poate fi obinut din vizualizarea USER_SOURCE, iardefiniiile tuturor versiunilor unui tip pot fi selectate din USER_TYPE_VERSIONS. De asemenea,

    pentru a afla toate obiectele schemei care depind de un anumit tip, se consult vizualizareaUSER_DEPENDECIES.

  • 7/26/2019 Laborator3_BDOO_master.pdf

    12/21

    12

    20.a) S se listeze numele, tipul i tipul dependenei pentru obiectele schemei care depind de tipult_stagiar.

    SELECT NAME, TYPE, REFERENCED_NAME, DEPENDENCY_TYPEFROM USER_DEPENDENCI ES

    WHERE UPPER( REFERENCED_NAME) = ' T_STAGI AR' ;a) S se afieze pentru fiecare tip definit de utilizator numele acestuia i numrul de versiuni definite

    pn la momentul curent.

    SELECT TYPE_NAME, COUNT( DI STI NCT VERSI ON#)FROM USER_TYPE_VERSI ONSGROUP BY TYPE_NAME;

    II.2 ComandaALTER TYPE

    Pentru modificarea structurii sau comportamentului unui tip definit de utilizator se folosetecomanda ALTER TYPE.De asemenea, aceast comand LDDpermite recompilarea specificaieisau a corpului tipului respectiv i schimbarea anumitor proprieti (FINAL, INSTANTIABLE).

    Sintaxa simplificat a comenziiALTER TYPE este:ALTER TYPE[schema.]nume_tip { COMPILE[DEBUG] [ {SPECIFICATION | BODY} ]

    [REUSE SETTINGS]| REPLACE[ {AUTH CURRENT_USER | DEFINER} ]AS OBJECT (atribut tip_de_date [, atribut tip_de_date]

    metoda_spec [, metoda_spec] )| { {ADD | DROP}metoda_spec [,metoda_spec]

    | { {ADD | MODIFY}ATTRIBUTE {atribut [tip_de_date]| (atribut tip_de_date [, atribut tip_de_date] ) }

    | DROP ATTRIBUTE{atribut| (atribut [, atribut] ) }

    | [NOT] {INSTANTIABLE | FINAL} }[ { INVALIDATE

    |CASCADE[ { [NOT] INCLUDING TABLE DATA | CONVERT TO SUBSTITUTABLE} ]

    [ [FORCE] EXCEPTIONS INTO[schema.]tabel} ] }

    21. a) Tipul t_persoanaconine atributele codde tip NUMBERi numede tip VARCHAR2(50). Sse adauge un atribut corespunztor codului numeric personal (cnp) i altul referitor la nlime(inaltime). S se elimine atributul cod i s se mreasc dimensiunea numelui pn la 60 decaractere.

    ALTER TYPE t _per soana

    ADD ATTRI BUTE ( cnp VARCHAR2( 13) ) ,DROP ATTRI BUTE cod, ADD ATTRI BUTE i nal t i me NUMBER( 3, 2) , MODI FY ATTRI BUTE nume VARCHAR2( 60)

    CASCADE;

    b) Urmtoarea comand ALTER TYPE, care face mai multe modificri aceluiai atribut, esteincorect i returneaz eroarea PLS-00716:Attribute/method 'CULOARE_OCHI' can occur onlyonce in an ALTER TYPE statement.

    ALTER TYPE t _per soanaADD ATTRI BUTE ( greut at e I NTEGER, cul oar e_ochi VARCHAR2(15) ) ,DROP ATTRI BUTE cul oare_ochi

    CASCADE;

    Dac se schimb proprietatea FINAL a unui tip, atunci este obligatorie clauza de dependen

  • 7/26/2019 Laborator3_BDOO_master.pdf

    13/21

    13

    CASCADE pentru a determina convertirea datelor din toate coloanele i tabelele dependente. nacest caz, nu este permis amnarea conversiei datelor cu opiunea NOT INCLUDING TABLEDATA. Evident c un tip care are deja subtipuri definite nu poate fi schimbat din NOT FINAL nFINAL.

    Clauza FORCEse specific dac sistemul trebuie s ignore erorile generate de procesul de

    propagare a schimbrilor i s execute comanda chiar dac nu sunt ndeplinite toate condiiile devalidare ale obiectelor dependente. Este posibil nregistrarea erorilor prute, n tabelul de excepiispecificat prin intermediul clauzei EXCEPTIONS INTO. Acest tabel trebuie s existe deja n schemacurent. El poate fi creat utiliznd proceduraCREATE_ALTER_TYPE_ERROR_TABLE din pachetulpredefinit DBMS_UTILITY.

    22. Re-creeaitipul t_persoana astfel nct acesta s coninatributele nume,prenumeivarsta. Sse modifice acest tip prin adugarea unui atribut data_nasterii i eliminarea atributului varsta.Modificarea trebuie s se fac doar cu propagarea schimbrilor structurale, urmnd ca datele s fieconvertite ulterior. De asemenea, eventualele erori de la modificarea tipului trebuie nregistrate ntabelul de erori e.DROP TYPE t _per soana FORCE;

    DROP TABLE t ab_per soane FORCE;CREATE OR REPLACE TYPE t _per soana AS OBJ ECT ( pr enume VARCHAR( 30) ,nume VARCHAR(30) ,

    varst a NUMBER( 3) ) ;/CREATE TABLE t ab_per soane OF t _persoana;I NSERT I NTO t ab_persoaneVALUES ( t _per soana( ' I on' , ' I onescu' , 50) ) ;SELECT VALUE( p)FROM t ab_per soane p;EXEC DBMS_UTI LI TY. CREATE_ALTER_TYPE_ERROR_TABLE( ' USER2' , ' E' ) ;

    ALTER TYPE t _per soanaADD ATTRI BUTE ( dat a_nast er i i DATE) ,

    DROP ATTRI BUTE var st aCASCADE NOT I NCLUDI NG TABLE DATA

    FORCE EXCEPTI ONS I NTO E;SELECT *FROM t ab_persoane;

    II.3 Opiunile comenziiALTER TABLE pentru modificarea tipurilor

    n cadrul procesului de modificare dinamic a unui tip avnd tabele dependente este util i

    comandaALTER TABLE. Aceasta prevede opiuni pentru convertirea datelor ctrecel mai recentformat al tipurilor referite. n acest context, sintaxa simplificat a comenzii este urmtoarea:

    ALTER TABLE [schema.]nume_tabel{UPGRADE[ [NOT] INCLUDING DATA]

    | DROP UNUSED COLUMNS | clauz_stocare_coloan}

    Clauza UPGRADE permite conversia metadatelor unui tabel astfel nct acestea s seconformeze cu cele mai recente versiuni ale tipurilor referite. Dac tabelul este deja valid, atuncimetadatele corespunztoare rmn neschimbate.

    Opiunea INCLUDING DATAeste similar cu cea din comandaALTER TYPE i determinconversia datelor stocate n coloanele de tip definit de utilizator ctre cele mai recente versiuni de

    tipuri. Aceast opiune este implicit.

  • 7/26/2019 Laborator3_BDOO_master.pdf

    14/21

    14

    23. a) S se modifice tipul t_persoana prin adugarea unui nou atribut de tip BLOB care sstocheze fotografia persoanei. S se actualizeze i tabelul dependent tab_persoane. Diferenadintre cele dou metode este c prima realizeaz conversia la nivel de tabel, iar cea de-a doua doarpentru coloana foto.

    ALTER TYPE t _per soana

    ADD ATTRI BUTE ( f ot o BLOB)CASCADE NOT I NCLUDI NG TABLE DATA;

    Metoda 1:

    ALTER TABLE t ab_per soane UPGRADE I NCLUDI NG DATA;

    Metoda 2:

    UPDATE t ab_per soaneSET f ot o = f ot o;

    b) n urma modificrii tipului t_persoana, s se verifice pentru tabelele dependentetab_persoanei tab_proiecte_externedac datele sunt actualizate la noul format.

    Obs: Pentru coloanele tabelului tab_persoaneconversia este fcut, pentru coloana responsabildintab_proiecte_externenu este fcut, iar pentru coloana denuumirenu este cazul.SELECT TABLE_NAME, COLUMN_NAME, DATA_UPGRADEDFROM USER_TAB_COLUMNSWHERE UPPER ( TABLE_NAME) I N ( ' TAB_PERSOANE' , ' TAB_PROI ECTE_EXTERNE' ) ;

    n cadrul unei comenzi ALTER TABLE pot fi specificate clauze de stocare pentru noileatribute de tip colecie sau LOB. Acestea sunt similare celor prezentate n seciunea despredefinirea tabelelor obiect.

    Algoritm pentru modificarea unui tip obiectSintetiznd, pentru a modifica un tip obiect trebuie urmai urmtorii pai:1) Se execut comandaALTER TYPEpentru modificarea tipului.2) Se utilizeaz comanda CREATE OR REPLACE TYPE BODYpentru a sincroniza corpul

    tipului cu noua definiie a acestuia.3) Se actualizeaz datele din tabelele dependente n conformitate cu ultima versiune de tip,utiliznd opiunile din comanda ALTER TABLE sau comenzi LMD asupra datelor ce trebuieconvertite.

    4) Se modific unitile de program PL/SQL dependente, astfel nct acestea s ia nconsiderare schimbrile aduse tipului.

    5) Se utilizeaz opional Oracle Type TranslatorsauJPublisherpentru a genera noile fiiereheaderpentru aplicaii, dac limbajul extern folosit de aplicaii este C, respectiv Java. Aceste utilitarepot automatiza operaia de actualizare a aplicaiei n urma schimbrilor asupra tipurilor de la nivelulbazei de date.

    II. Eliminarea tipurilor obiect

    Pentru suprimarea unui tip definit de utilizator este disponibil instruciunea DROP TYPE.Utilizatorul care iniiaz aceast comand trebuie s fie proprietarul tipului sau s aib privilegiulsistem DROP ANY TYPE.

    Sintaxa comenzii este:

    DROP TYPE [schema.]nume_tip [ {FORCE| VALIDATE} ]

    Dac nu se precizeaz numele schemei, atunci sistemul presupune c tipul ce va fi eliminat seafl n propria schem. Opiunile FORCE sau VALIDATE sunt obligatorii pentru eliminareatipurilor care au obiecte dependente.

    Clauza FORCE este specificat dac se dorete eliminarea unui tip dei exist obiecte ale bazei

    care sunt dependente de acesta. n acest caz, sistemul marcheaz invalide toate tipurile,coloanele sau tabelele dependente de tipul eliminat, acestea devenind inaccesibile pn la

  • 7/26/2019 Laborator3_BDOO_master.pdf

    15/21

    15

    revalidare. Atunci cnd este specificat clauza FORCE, sistemul Oraclemai nti disociaz toate obiectele

    asociate cu tipul respectiv i apoi elimin tipul.

    Dac se precizeaz clauza VALIDATE, sistemul caut instanele stocate n cadrul coloanelorsubstituibile avnd tipul respectiv i subtipuri ale acestuia. Dac nu este gsit nici o astfel de

    instan, sistemul duce la bun sfrit comanda propagnd schimbarea ctre toate coloanelesubstituibile de tipul respectiv. Din cauz c invalidarea unui tabel poate duce la pierdereadatelor stocate n acesta, se recomand utilizarea opiunii VALIDATEla tergerea oricrui tip.

    24. S se elimine tipul t_persoana fr a utiliza opiunea FORCE. Tipul t_persoana este tipulrdcin al ierarhiei ce conine tipurile t_angajat_permanent, t_colaborator_extern i t_stagiar. Deasemenea, acest tip este utilizat n cadrul tabelului tab_persoanei tab_proiecte_externe.

    - - mai i nt ai t abel el e dependent eDROP TABLE t ab_pr oi ect e_ext erne;DROP TABLE t ab_per soane;- - t i pur i l e i ncepand de l a subt i pur i pana l a t i pul r adaci na

    DROP TYPE t _st agi ar ;DROP TYPE t _col aborator_ext ern;DROP TYPE t _angaj at _permanent ;- - el i mi nar ea t i pul ui t _per soanaDROP TYPE t _persoana;

    IV. Dependene i tipuri incomplete

    Tipurile obiect pot fi n relaie, n sensul c se folosesc unul pe cellalt n cadrul definiiei lor. Tipurile pot fi dependente n mod direct sau indirect, prin intermediul tipurilor intermediare, numite

    mutual dependente. Un graf orientat de tipuri mutual dependente n care tipurile sunt noduri idependenele sunt reprezentate prin arce, conine ntotdeauna un circuit. Pentru a defini astfel de

    dependene circulare, trebuie s fie utilizat tipul referin pe cel puin unul dintre segmentelecircuitului.

    Exist dou metode de abordare pentru crearea a dou tipuri dependente ( t_a i t_b) n moddirect.

    Prima metod presupune urmtorii pai:o crearea tipului t_a ca tip incomplet;o crearea tipului t_b, care refer tipul existent tip_a;o completarea definiiei tipului t_a(prin CREATE OR REPLACE TYPE).

    Cea de-a doua metod ia n considerare faptul c, atunci cnd apar erori de compilare ladefinirea unui tip, sistemul creeaz automat tipul ca fiind incomplet. Paii acestei metode sunt

    urmtorii:o crearea tipului t_a(sistemul creeaz automat tipul t_a incomplet);o crearea tipului t_b, care refer tipul existent tip_a;o compilarea tipului t_a(prinALTER TYPECOMPILE).

    25. a) Suprimai tipurile t_dep i t_angajat create n cadrul laboratorului 1. Se vor terge mai ntiobiectele dependente de acestea. b) Utiliznd cele dou metode prezentate anterior, s se defineasc tipuri ce modeleazentitile dependente angajati departament. Tipul t_angajatconine un atribut care face referin laun obiect de tip t_departament, iar tipul t_departamentare un atribut de tip colecie care coninepentru fiecare departament angajaii corespunztori.

    Metoda 1:CREATE TYPE t _depar t ament ;

  • 7/26/2019 Laborator3_BDOO_master.pdf

    16/21

    16

    /CREATE TYPE t _angaj at AS OBJ ECT ( cod_ang NUMBER,nume VARCHAR2( 10) ,pr enume VARCHAR2( 200) ,dep REF t _depar t ament ,

    data_angaj ar i i DATE, sal ar i u NUMBER) ;/CREATE TYPE t _angaj at i _t i AS TABLE OF t _angaj at ;/CREATE TYPE t _depar t ament AS OBJ ECT (denumi r e VARCHAR2( 30) ,anul _i nf i i nt ar i i VARCHAR2( 4) ,obser vat i i VARCHAR2(2000) ,angaj at i t _angaj at i _t i ) ;

    /

    Metoda 2:--tergei mai nti tipurile create prin metoda 1CREATE TYPE t _depar t ament AS OBJ ECT (denumi r e VARCHAR2( 30) ,anul _i nf i i nt ar i i VARCHAR2( 4) ,obser vat i i VARCHAR2(2000) ,angaj at i t _angaj at i _t i ) ;

    /CREATE TYPE t _angaj at AS OBJ ECT (cod_ang NUMBER,nume VARCHAR2( 10) ,pr enume VARCHAR2( 200) ,

    dep REF t _depar t ament ,data_angaj ar i i DATE,

    sal ar i u NUMBER) ;/CREATE TYPE t _angaj at i _t i AS TABLE OF t _angaj at ;/ALTER TYPE t _depar t ament COMPI LE;

    Un tip incomplet poate fi definit n urmtoarele dou situaii: n mod explicit de ctre utilizator, atunci cnd comanda de creare a tipului stabilete doar unnume pentru tip, omind definirea structurii i comportamentului acestuia; n mod implicit de ctre sistem, atunci cnd la crearea unui tip apar erori de compilare i tipuleste creat fr a i se asocia o structur i un comportament valid.

    26. Recreeai tipurile t_persoana, t_angajat_permanent, t_colaborator_extern i t_stagiar. S secreeze tabelul obiect substituibil tab_colaboratori_externi, care s nu conin obiecte de tipt_stagiar. S se insereze o nregistrare de tip t_colaboratori apoi s se elimine tipul t_stagiar.CREATE TABLE t ab_col aborator i _ext erni OF t _col aborat or_ext ern;

    I NSERT I NTO t ab_col aborator i _ext er niVALUES ( t _col abor at or _ext er n( 1, ' Dani el Mi hai ' , ' pr ogr amat or ' , nul l ) ) ;COMMI T;- - DROP TYPE t _s t agi ar

    - - r etur neaza er oar ea ORA- 02303DROP TYPE t _st agi ar VALI DATE;

  • 7/26/2019 Laborator3_BDOO_master.pdf

    17/21

    17

    V. Tipuri generice i tranzitorii

    Sistemul Oracleasigur trei tipuri de date SQL generice care permit ncapsularea dinamic iaccesul la descrieri de tipuri, instane de date i seturi de instane de date ale altor tipuri SQL,

    inclusiv tipuri obiect sau colecie. Aceste tipuri speciale pot fi utilizate pentru implementarea detipuri anonime. Tipurile generice aparin schemei SYS.

    Tipurile generice sunt urmtoarele:o ANYTYPE, care conine o descriere a unui tip SQL;o ANYDATA, care este un tip autodescriptiv pentru instanele tipurilor de date, coninnd

    att date, ct i o descriere a fiecrui tip utilizat;o ANYDATASET, care este un tip autodescriptiv pentru seturi de instane i care include o

    descriere a tipului mpreun cu un set de instane ale tipului respectiv. TipurileANYDATAiANYDATASETpot fi stocate persistent n cadrul bazei de date. ANYTYPE,

    dei se refer la un tip stocat persistent n baza de date, este tranzitoriu , valoarea lui nefiindstocat automat n baza de date.

    27.Se consider tipul t_persoanacreat anterior, ce conine atributele codinume. Se definete untabel tab_generic cu dou coloane, cod de tip numeric i data de tip SYS.ANYDATA. S seconstruiasc o procedur care parcurge tabelul i afieaz sugestiv datele stocate n coloana de tipSYS.ANYDATA, interpretnd tipul de baz i procesnd valoarea corespunztor cu acest tip.

    CREATE TABLE t ab_gener i c ( cod NUMBER,

    dat a SYS. ANYDATA) ;

    I NSERT I NTO t ab_gener i c VALUES( 1, SYS. ANYDATA. CONVERTnumber ( 10) ) ;I NSERT I NTO t ab_gener i c VALUES( 2, SYS. ANYDATA. CONVERTobj ect ( t _per soana( 99, ' Dal i ' ) ) ) ;I NSERT I NTO t ab_gener i c VALUES

    ( 3, SYS. ANYDATA. CONVERTvarchar 2( ' art a' ) ) ;COMMI T;

    CREATE OR REPLACE PROCEDURE proc_gener i ca I SCURSOR c_gener i c I S

    SELECT cod, dataFROM t ab_gener i c;

    v_cod t ab_gener i c. cod%TYPE;v_dat a t ab_gener i c. data%TYPE;v_t i p SYS. ANYTYPE;v_codt i p PLS_I NTEGER;v_numet i p VARCHAR2( 60) ;

    v_dummy PLS_I NTEGER;v_ numar NUMBER;

    v_var char 2 VARCHAR2( 100) ; v_per soana t _per soana;

    anyt ype_nenul _pt _scal ar EXCEPTI ON;numet i p_necunoscut EXCEPTI ON;

    BEGI NFOR v_r ec I N c_gener i c LOOP

    v_cod : = v_r ec. cod; v_dat a : = v_r ec. dat a; / * codul t i pul ui est e un numar car e i dent i f i ca

    ** t i pul val or i i l ui v_data. * / v_codt i p : = v_dat a. Get Type ( v_ti p) ;

    / * v_codt i p est e compar at cu const ant el e di n pachet ul** DBMS_TYPES pent r u a det ermi na t i pul de dat e si

    ** a deci de modal i t at ea de af i sare */ CASE v_codt i p - - daca est e numer i c. .

  • 7/26/2019 Laborator3_BDOO_master.pdf

    18/21

    18

    WHEN DBMS_TYPES. TYPECODE_number THENI F v_t i p I S NOT NULL THEN

    - - t i pul scal ar t r ebui e sa r et ur neze v_t i p nul l RAI SE anyt ype_nenul _pt _scal ar ;

    END I F;v_dummy : = v_data. GETnumber ( v_numar ) ;DBMS_OUTPUT. PUT_LI NE ( TO_CHAR( v_cod) | |

    ' : NUMBER = ' | | TO_CHAR( v_numar ) ) ;- - daca est e si r de car act er e. .

    WHEN DBMS_TYPES. TYPECODE_var char 2 THENI F v_t i p I S NOT NULL THEN

    - - t i pul scal ar t r ebui e sa r et ur neze v_t i p nul l RAI SE anyt ype_nenul _pt _scal ar;

    END I F;v_dummy : = v_data. GETvar char 2 ( v_varchar2) ;DBMS_OUTPUT. PUT_LI NE ( TO_CHAR( v_cod) | |

    ' : VARCHAR2 = ' | | v_var char 2) ;- - daca est e de t i p obi ect. .

    WHEN DBMS_TYPES. TYPECODE_obj ect THENv_numet i p : = v_data. GetTypeName( ) ;

    - - numel e unui t i p obi ect est e cal i f i cat cu numel e- - schemei di n car e f ace par t e

    I F UPPER( v_numet i p) ! = ' STUDENT. T_PERSOANA' THEN - - es te al t t i p? RAI SE numet i p_necunoscut ; END I F;

    v_dummy : = v_data. GETobj ect ( v_persoana) ;DBMS_OUTPUT. PUT_LI NE ( TO_CHAR ( v_cod) | |

    ' : t i p obi ect = ' | | v_numet i p | |' ( ' | | v_persoana. cod | | ' , ' | |

    v_per soana. nume | | ' ) ' ) ;END CASE;

    END LOOP;

    EXCEPTI ONWHEN anyt ype_nenul _pt _scal ar THENRAI SE_Appl i cat i on_Er r or ( - 20001,' Par adox: i nst ant a de t i p AnyType ret ur nata de Get Type '| | ' t r ebui e sa f i e NULL pent r u t oat e t i pur i l e scal ar e' ) ;

    WHEN numet i p_necunoscut THENRAI SE_Appl i cat i on_Er r or ( - 20002, ' Ti p necunoscut ' | |

    v_numet i p| | ' pr ogr am val i d pent r u user 2. t _per soana' ) ;END pr oc_gener i ca;/

    SQL> SELECT t . dat a. get t ypename( ) FROM t ab_gener i c t ;

    SQL> EXEC proc_gener i ca;

    VI. Stocarea obiectelor

    28. Se consider tabelul obiect substituibil tab_persoane cu elemente de tip t_persoana. S seselecteze identificatorii de tip corespunztori obiectelor stocate n tabel.

    CREATE TABLE t ab_persoane OF t _per soana;

    I NSERT I NTO t ab_persoaneVALUES ( t _per soana (15, ' Geor gescu' ) ) ;I NSERT I NTO t ab_persoaneVALUES ( t _col abor at or _ext er n ( 25, ' I van Vi or el ' , ' asi st ent ' , NULL) ) ;I NSERT I NTO t ab_persoaneVALUES ( t _st agi ar ( 35, ' Si mona Popescu' , ' pr ogr amat or j r . ' ,

    NULL, 3, ' I nf or mat i ca' ) ) ;SELECT nume, SYS_TYPEI D( VALUE( p) ) " I dent i f i cator de t i p"

  • 7/26/2019 Laborator3_BDOO_master.pdf

    19/21

    19

    FROM t ab_per soane p;

    Vizualizarea USER_TYPESdin dicionarul datelor are o coloan denumit TYPEIDcare coninevaloarea identificatorului pentru fiecare tip.

    29.S se selecteze numele persoanelor i numele celui mai specific tip al instanei corespunztoare

    stocate n tabelul tab_persoane.SELECT p. nume, ut . TYPE_NAMEFROM t ab_per soane p, USER_TYPES utWHERE SYS_TYPEI D( VALUE(p) ) = ut . TYPEI DAND TYPE_NAME I N

    ( ' T_PERSOANA' , ' T_ANGAJ AT_PERMANENT' , ' T_COLABORATOR_EXTERN' ,' T_STAGI AR' ) ;

    Fiecare linie obiect dintr-un tabel obiect trebuie s aib un identificator logic asociat (OID), cares fie unic. Identificatorii obiect pot fi generai de sistem sau bazai pe o cheie primar existent.Acetia sunt utilizai pentru a construi referine la acel obiect. Identificatorii obiect bazai pe cheie primar permit ncrcarea mai uoar i mai rapid a datelorstocate ntr-un tabel obiect. n schimb, identificatorii obiect generai de sistem au avantajul c nutrebuie s fie gestionai de utilizator folosind chei definite de acesta, unicitatea lor fiind asigurat desistem. Prin urmare, mecanismul de refereniere al obiectelor este mai sigur.

    Atunci cnd se construiete o referin ctre o linie obiect, aceasta este format din identificatorulobiect, unele metadate despre tabelul obiect care conine linia respectiv i, opional, identificatorulde linie (ROWID). Pentru o coloan de tip referin cu domeniu, spaiul de stocare asociat acesteiaeste mai mic, nefiind necesare metadatele tabelului obiect.

    Liniile obiect de tip tablou imbricat sunt meninute ntr-un tabel de stocare separat. Fiecare tablouimbricat are un singur tabel de stocare asociat tuturor liniilor i nu cte unul pentru fiecarenregistrare. Acesta conine valorile tuturor elementelor coloanei respective. Pentru a face asocierea

    dintre elementele tabloului imbricat i nregistrrile printe corespunztoare, tabelul de stocare areo coloan ascuns NESTED_TABLE_IDcare conine un identificator generat de sistem.

    VII. Funcii i predicate utile

    n lucrul cu obiectele i referinele ctre obiecte apar frecvent funciile VALUE, REF,DEREF,TREAT, SYS_TYPEID i predicatul IS OF tip. n blocurile PL/SQL, funciile VALUE, REF iDEREFpot aprea doar n comenzi SQL.

    30.a) S se selecteze n form obiectual, respectiv relaional, toate persoanele al cror numeeste Georgescu.

    SELECT VALUE( p)FROM t ab_per soane pWHERE p. nume = ' Geor gescu' ;

    SELECT *FROM t ab_per soane pWHERE nume = ' Geor gescu' ;

    Se observ c abordarea obiectual permite extragerea mai multor informaii, i anumevalorile tuturor atributelor celui mai specific tip al instanei. Abordarea relaional extrage numaivalorile atributelor pentru tipul specificat al tabelului (codi numeale tipului rdcin t_persoana).

    b) S se selecteze persoanele (cod i nume), inclusiv artitii i autorii, dintr-o vizualizare obiect

    viz_persoane asupra tabelului obiect tab_persoane.CREATE VI EW vi z_per soane OF t _persoana

  • 7/26/2019 Laborator3_BDOO_master.pdf

    20/21

    20

    AS SELECT *FROM t ab_per soane;

    SELECT VALUE( p)FROM vi z_per soane p;

    31.S se listeze referine ctre toate persoanele, inclusiv ctre autori i artiti.SELECT REF( p)FROM t ab_per soane p;

    32. S se selecteze liniile obiect coninute n tabelul obiect tab_persoane, innd cont desubstituibilitatea acestuia. Vor fi afiate nregistrrile stocate att relativ la persoane obinuite, ct ila artiti sau autori.

    SELECT DEREF( REF( p) )FROM t ab_per soane p;

    33.a) Se consider tabelul definit anterior, tabel, avnd atributele perscolde tip t_persoana, cbcol

    de tip t_colaborator_extern istcol de tip t_stagiar. S se realizeze o atribuire prin limitare ntrecoloanele cbcol i perscol. Pentru fiecare linie, TREAT returneaz o expresie de tipt_colaborator_extern, dac n linia respectiv este stocat o valoare de acest tip, sau valoarea null,n caz contrar.

    UPDATE t abelset cbcol = TREAT( per scol AS t _col abor at or_exter n) ;

    b) S se selecteze toate instanele de tip t_colaborator_extern ale tabelului obiecttab_persoane de tip t_persoana. Comanda utilizeaz TREAT pentru a modifica tipul fiecrei liniiobiect din t_persoanan t_colaborator_extern.

    SELECT TREAT(VALUE( p) AS t _col aborator_extern)

    FROM t ab_per soane p;

    c) S se selecteze referine ctre toate instanele t_colaborator_extern din tabelul obiecttab_persoane.

    SELECT TREAT(REF( p) AS REF t _col aborator_ext ern)FROM t ab_per soane p;

    Una dintre cele mai frecvente utilizri a funciei TREATeste aceea de a accesa atributele imetodele unui subtip al tipului unei linii sau coloane obiect.

    34. S se listeze numele i ocupaia persoanelor din tabelul tab_persoane. S va afia ocupaia,

    pentru persoanele care sunt caracterizate prin acest atribut i, n rest, valoarea null. Atributulocupatieface parte din tipul t_colaborator_extern.SELECT nume, TREAT(VALUE( p) AS t _col aborator _ext ern) . ocupat i e ocupat i eFROM t ab_per soane p;

    Urmtoarea cerere va declana o eroare (ORA-00904:invalid identifier) deoarece ocupatieeste un atribut al tipului t_colaborator_externi nu al tipului t_persoana.

    SELECT nume, VALUE( p) . ocupat i e ocupat i eFROM t ab_per soane p;

    Un tabel sau o coloan obiect de tip Tcare sunt substituibile, au asociat cte o coloanascuns corespunztoare fiecrui atribut al subtipurilor lui T. Aceste coloane nu sunt listate de ocomand DESCRIBE, dar ele conin date referitoare la atributele subtipurilor. Funcia TREATpermite accesul la aceste coloane.

  • 7/26/2019 Laborator3_BDOO_master.pdf

    21/21

    21

    35.Adugaitipuluit_colaborator_extern o metod ocupatie ce returneaz valoarea acestui atributpentru o instan obiect dat. S se descrie structura tabelului tab_persoane i s se afiezenumele i ocupaia fiecrei persoane. Exemplul arat modul de utilizare al funciei TREATpentru aaccesa o metod.DESC t ab_per soaneSELECT nume, TREAT(VALUE( p) AS t _col aborat or_ext er n) . ocupat i e( ) ocupat i eFROM t ab_per soane p;

    36.S se selecteze doar instanele obiect de tip t_colaborator(inclusiv instanele corespunztoaresubtipurilor acestuia) stocate n tabelul tab_persoane.

    SELECT VALUE( p)FROM t ab_per soane pWHERE VALUE( p) I S OF ( t _col aborat or_extern) ;

    37. a) S se selecteze proiectele externe ale cror responsabili sunt de tip t_colaborator. Suntexcluse proiectele externe ale cror responsabili sunt de un subtip al tipului t_colaborator (deexemplu, t_stagiar).SELECT t . denumi r e denumi r e, t . r esponsabi l r esponsabi lFROM t ab_proi ect e_ext er ne tWHERE t . r esponsabi l I S OF ( ONLY t _col aborator) ;

    b) S se selecteze referine ctre obiectele de tip t_colaborator sau t_angajat_permanent,stocate n tabelul tab_persoane.SELECT REF( p)FROM t ab_per soane pWHERE VALUE( p) I S OF ( t _col aborat or_extern, t _angaj at _per manent ) ;

    c) S se afieze numai autorii pentru care t_colaborator este cel mai specific tip. Exemplulutilizeaz funcia TREATpentru a converti obiectele de tip t_colaboratorde la tipul tabelului obiecttab_persoane (t_persoana) la t_colaborator. n acest fel, sunt listate toate atributele tipuluicorespunztor instanei returnate.

    SELECT TREAT( VALUE(p) AS t _col abor at or _ext ern) AUTORFROM t ab_per soane pWHERE VALUE( p) I S OF ( ONLY t _col aborator_ext ern) ;

    SELECT p. *FROM t ab_per soane pWHERE VALUE( p) I S OF ( ONLY t _col aborator_ext ern) ;

    38. a) Se consider tabelul obiect substituibil tab_persoane, avnd tipul t_persoana. Tipult_persoana este tipul rdcin al ierarhiei. Acesta are pe t_colaborator_extern i

    t_angajat_permanentca subtipuri, iar pe t_stagiarca subtip al tipului t_colaborator_extern. S seafieze numele fiecrei persoane i identificatorul tipului instanei respective.

    SELECT nume, SYS_TYPEI D( VALUE(p) ) cod_t i pFROM t ab_persoane p;

    b) S se afieze denumirea proiectului, numele i identificatorii celor mai specifice tipuri, pentruresponsabilii de proiecte externenregistrai n tabelul tab_proiecte_externe. Coloana responsabildetip t_persoanaeste substituibil.

    SELECT t . denumi r e, t . r esponsabi l . nume, SYS_TYPEI D( r esponsabi l ) cod_t i pFROM t ab_proi ect e_ext er ne t ;