B.1 INTRDU!" A SQL3 #rovavelme$%e ser& ra%i'i(ada (omo )m #adro *+SQL,--./ $a 0#o(a em 1)e es%e livro es%iver $o #relo. Por0m2 #re'erimos $o 3asear $ossas dis()ss4es a$%eriores da SQL $a SQL32 em #ar%e #elas ra54es e6#li(adas $o Ca#7%)lo 8 e em #ar%e #or1)e 9 #ara di5er o m7$imo 9 a(:amos a SQL3 )m #o)(o (o$')sa. Por o)%ro lado2 se$%imos 1)e deveria ser i$(l)7da em alg)m l)gar #elo me$os )ma avalia;o das #ri$(i#ais (ara(%er7s%i(as da SQL3< da7 es%e a#=$di(e. E (laro 1)e a SQL3 i$(l)i a %o%alidade da SQL,->2 e6(e%o #or alg)$s re()rsos se()$d&rios *$e$:)m deles dis()%ido $es%e livro/ 1)e 'oram deli3eradame$%e des(ar%ados? SQLCDE2 i$%eiros sem si$al em l)gar de $omes de (ol)$as em RDER B@2 +i$%rod)(ers. em ide$%i'i(adores2 (er%os (o$A)$%os de (ara(%eres de'i$idos #elo )s)&rio2 e (om#ara;4es e %rad);4es2 al0m de o)%ros i%e$s. Co$%)do2 #or ra54es B3vias2 vamos $os (o$(e$%rar a1)i $as (ara(%er7s%i(as a(res(e$%adas desde 1--> e em#regaremos o $ome +SQL3. #or (o$ve$i=$(ia 1)a$do $os re'erirmos es#e(i'i(ame$%e a esses re()rsos. Dessas $ovas (ara(%er7s%i(as2 de lo$ge as mais sig$i'i(a%ivas so a1)elas rela(io$adas (om %i#os de dados de'i$idos #elo )s)&rio e ass)$%os (orrela%os2 1)e des(reveremos $as Se;4es B.> a B.C. s mais im#or%a$%es de$%re os o)%ros re()rsos sero e6ami$ados ra#idame$%e $a Se;o B.D. No%a? )ma a$&lise de%al:ada e (r7%i(a do ass)$%o das Se;4es B.> a B.C #oder& ser e$(o$%rada $a re'er=$(ia E3.3F. A$%es de e$%rarmos em de%al:es so3re a SQL32 devemos me$(io$ar algo a res#ei%o da SQLG E8.DF. $ome +SQLG. se re'ere i$'ormalme$%e a )m #roAe%o de (o$siderar #oss7veis gra)s de i$%egra;o e$%re SQL e Gava *o #roAe%o 0 )m es'or;o (o$A)$%o e$volve$do alg)$s dos mais (o$:e(idos 'or$e(edores de SHBDs de SQL/. A Par%e desse #roAe%o lida (om a SQL i$(or#orada a #rogramas em Gava< a Par%e 1 se rela(io$a (om a id0ia de i$vo(ar Gava a #ar%ir de SQL *#or e6em#lo2 (:ama$do )m #ro(edime$%o arma5e$ado es(ri%o em Gava/< aPar%eII es%)da a #ossi3ilidade de )so de (lasses do Aava (omo %i#os de dados de SQL *#or e6em#lo2 (omo )ma 3ase #ara a de'i$i;o de (ol)$as em %a3elas de SQL/. Te($i(ame$%e2 $e$:)ma dessas a%ividades 'a5 #ar%e da SQL3 (omo %al2 mas a SQLG Par%e o A& %i$:a sido #)3li(ada *#elo me$os $os EUA/ (omo o #rimeiro (om#o$e$%e de )ma $ova Par%e 1J do es3o;o do #adro SQL E8.>>F2 e 0 #rov&vel 1)e a SQLG Par%es 1 e II ve$:a logo a seg)ir2 %alve5 $a 0#o(a em 1)e a SQL3 'or #)3li(ada 'ormalme$%e. Tam30m 0 #rov&vel 1)e )ma $ova verso de SQL,CLI *(o$s)l%e o Ca#7%)lo 8/ s)rAa $a mesma 0#o(a $o mer(ado. KeAamos alg)$s (ome$%&rios edi%oriais a res#ei%o do %e6%o a seg)ir? #rimeiro2 )%ili5aremos (om 're1L=$(ia o (ara(%ere +M+ em $omes de (ol)$as em $ossos e6em#los *(omo 'i5emos em %odo o livro/2 em3ora +M+ $o seAa $a verdade )m (ara(%ere v&lido em SQL3< %am30m )saremos o si$al de #o$%oNeNv7rg)la +<+ (omo )m %ermi$ador de i$s%r);o *mais )ma ve52 re#e%i$do e6em#los a$%igos/. Em seg)$do l)gar2 devemos dei6ar (laro 1)e as dis()ss4es seg)i$%es $o sero $em de #er%o e6a)s%ivas. Por 'im2 0 (laro2 'a5 #ar%e da $a%)re5a desses %emas o 'a%o de alg)$s de%al:es #ossivelme$%e %erem sido al%erados $a 0#o(a em 1)e a SQL3 'or ra%i'i(ada. Pedimos des()l#as ao lei%or. OOC B.> NKS TIPS DE DADS Como s)geri) a se;o a$%erior2 os as#e(%os mais imedia%ame$%e vis7veis da SQL3 es%o %odos rela(io$ados (om %i#os de dados.P Q& $ovos %i#os em3)%idos o) i$%er$os *#ara sermos #re(isos2 $ovos %i#os es(alares em3)%idos/< :& $ovos geradores de %i#os em3)%idos *a SQL3 os (:ama (o$s%r)%ores de %i#os/< e :& )ma i$s%r);o CREATE T@PE 1)e #ermi%e ao )s)&rio de'i$ir se)s #rB#rios %i#os *al0m 0 (laro2 de )ma i$s%r);o DRP T@PE (orres#o$de$%e/. Kamos e6ami$ar (ada )m desses re()rsos. Ti#os es(alares em3)%idos So admi%idos %r=s $ovos %i#os es(alares em3)%idos *o) i$%er$os/? BLEAN? o %i#o BLEAN 0 $a%)ralme$%e )m %i#o de valor verdade< os o#eradores 3oolea$os )s)ais *NT2 AND2 R/ so re(o$:e(idos2 e )ma e6#resso 3oolea$a #ode a#are(er em %odos os l)gares $os 1)ais (os%)mam o(orrer e6#ress4es es(alares *sem rigor/. Por0m2 o3serve 1)e a SQL (o$sidera a e6is%=$(ia de %r=s valores verdade2 e $o dois2 (omo vimos $o Ca#7%)lo 1R< os li%erais (orres#o$de$%es so TRUE2 SALSE e UNTNUN. Todavia2 o %i#o BLEAN i$(l)i de 'a%o a#e$as dois valores2 e $o %r=s< o valor verdade des(o$:e(ido *)$V$oW$/ 0 re#rese$%ado 9 de modo 3as%a$%e i$(orre%oI 9 #or $)lo *#or e6em#lo2 a a%ri3)i;o de UNTNUN a )ma vari&vel do %i#o BLEAN $a verdade de'i$ir& essa vari&vel (omo $)la/. Para e$%e$der o 1)a$%o 0 s0ria essa de'i(i=$(ia2 vo(= deve medi%ar so3re a a$alogia de )m %i#o $)m0ri(o 1)e )%ili5asse o valor $)lo em ve5 de 5ero #ara re#rese$%ar 5ero. )%ro de%al:e si$g)lar 0 o 'a%o de 1)e a SQL3 *es%ra$:ame$%e/ $o (o$sidera )ma sim#les re'er=$(ia X vari&vel 3oolea$a (omo )ma i$s%Y$(ia da1)ilo 1)e (:amamos Z#rim&rio (o$di(io$al[ $o A#=$di(e A. Assim2 #or e6em#lo2 se B 'or do %i#o BLEAN )ma (l&)s)la UQERE da 'orma UQERE B $o ser& v&lidaI G)$%ame$%e (om o %i#o BLEAN2 a SQL3 i$%rod)5 dois $ovos o#eradores de agregados2 EKER@ 9 e $o ALL2 #or alg)ma ra5o 9 e AN@. Em am3os os (asos2 o arg)me$%o 0 )ma (ol)$a de valores BLEAN *1)ase (er%ame$%e )ma (ol)$a derivada (omo2 #or e6em#lo2 a (l&)s)la UQERE2 AN@ *QDE[ >JJ/ de UQERE/. Se a (ol)$a 'or va5ia2 am3os os o#eradores re%or$aro des(o$:e(ido *o) mel:or2 $)lo/< PP se a (ol)$a 'or $o va5ia2 EKER@ re%or$ar& verdadeiro se %odo valor $a (ol)$a 'or verdadeiro e re%or$ar& 'also em (aso (o$%r&rio2 e AN@ re%or$ar& 'also se %odo valor $a (ol)$a 'or 'also e re%or$ar& verdadeiro em (aso (o$%r&rio. Como o(orre (om o)%ros o#eradores de agregados de SQL2 os $)los so elimi$ados a$%es de ser 'ei%a a agrega;o. \ CLB *+o3Ae%o de (ara(%eres e6%e$so. 9 (ara(%er large o3Ae(%/? esse %i#o re#rese$%a s%ri$gs de (ara(%eres de (om#rime$%o vari&vel (om %ama$:o esse$(ialme$%e ilimi%ado. Um me(a$ismo lo(ali5ador asso(iado2 a$&logo *a%0 (er%o #o$%o/ ao 'amiliar me(a$ismo de ()rsor2 #ermi%e o a(esso a (ada 'ragme$%o desses s%ri$gs. ])i%os o#eradores )s)ais de s%ri$gs de (ara(%eres $o so admi%idos $o (aso desses s%ri$gs< e$%re os 1)e so re(o$:e(idos es%o +^+ e LITE. \ BLB *+3Ae%o 3i$&rio e6%e$so./? a$&logo ao a$%erior2 e6(e%o #elo 'a%o de 1)e os s%ri$gs so se1L=$(ias 'ormadas de +o(%e%os. 9 is%o 02 3_%es 9 em ve5 de (ara(%eres. Ti#os gerados s geradores de %i#os de SQL3 so RES2 ARRA@ e RU. Por0m2 o `$i(o modo de de'i$ir )m +%i#o RES. 0 im#li(i%ame$%e2 (omo )m e'ei%o (ola%eral da de'i$i;o de )m +%i#o es%r)%)rado. #or meio de CREATE T@PE *veAa o)%ros de%al:es mais adia$%e $es%a se;o/< dessa 'orma2 vamos ig$orar RES #or e$N P a %e$%ador a(res(e$%ar 1)e )ma das #ar%es mais imedia%ame$%e i$vis7veis 0 a de +dom7$ios. $o es%ilo de SQL *(o$s)l%e os Ca#7%)los 8 e C/ 1)e #are(e es%ar se$do sile$(iosame$%e ig$orada. OOD PP Com#are (om o (om#or%ame$%o de (o$di;4es +%odos o) 1)ais1)er. so3 esse as#e(%o *(o$s)l%e o A#=$di(e A/. 1)a$%o. Q)a$%o aos %i#os ARRA@ e RU2 eles $o #odem realme$%e ser de'i$idos2 (omo %ais *$o :& $e$:)ma i$s%r);o CREATE ARRA@ T@PE o) CREATE RU T@PE/< eles sB #odem ser )sados2 a%rav0s da i$vo(a;o +em li$:a. do gerador de %i#o releva$%e em *#or e6em#lo/ )ma i$s%r);o CREATE TABLE. Como e6em#lo2 a1)i es%& )ma il)s%ra;o do )so de )m %i#o ARRA@? CREATE TABLE KENDAS * ITE]M CQAR*C/2 QDE INTEHER ARRA@ E1>F2 PRI]AR@ TE@ * ITE]M / / A1)i2 a (ol)$a QDE %em )m valor de arra_ *o) ma%ri5/< )m valor QDE (o$sis%e em )m arra_ de 1> eleme$%os2 (ada )m do %i#o INTEHER. No%a? os arra_s de SQL es%o limi%ados a )ma dime$so e2 #or s)a ve52 se)s eleme$%os $o #odem ser arra_s. A1)i es%& )m e6em#lo de )ma (o$s)l%a so3re KENDAS? SELECT ITE]M SR] KENDAS UQERE QDE E3F [ 1JJ *+3%er $`meros de i%e$s (orres#o$de$%es a i%e$s ()Aas ve$das de mar;o e6(ederam 1JJ.< o3serve a re'er=$(ia s)3s(ri%a/. E a1)i es%& )m e6em#lo de i$ser;o de )ma li$:a? INSERT INT KENDAS * ITE]M2 QDE KALUES * bc83>Jd2 ARRA@ EJ2J2J2J2J2J2J2J2J2J2J2JF/ *o3serve o li%eral arra_/. s %i#os RU so semel:a$%es. Por e6em#lo? CREATE TABLE CNSU * CNSUM CQAR*3/2 ENDER RU * RUA CQAR *CJ/2 CIDADE CQAR*>C/2 ESTAD CQAR*>/2 CEP CQAR*C/ / PRI]AR@ TE@ * CNSUM / / Amos%ra de (o$s)l%a? SELECT CNSUM SR] CNSU UQERE ENDER.ESTAD ^ bCAd Amos%ra de i$ser;o? INSERT INT CNSU * CNSUM2 ENDER / KALUES * bJJ1d2 RU * bAv. Brasil2 1DJJd2 bBl)me$a)2 bSCd2 b>JCJJd / / Ti#os DISTINCT A b$ova i$s%r);o CREATE T@PE (ria )m %i#o de'i$ido #elo )s)&rio? ele 0 )m %i#o DISTINCT o) )m %i#o +es%r)%)rado. *o3serve de #assagem 1)e os %i#os gerados 9 ver a s)3se;o a$%erior 9 $o so (o$sideradas %i#os +de'i$idos #elo )s)&rio. $o mesmo se$%ido/. Nes%a s)3se;o2 des(reveremos a#e$as os %i#os DISTINCT. Um %i#o DISTINCT *es%a3ele(emos +DISTINCT. em le%ras mai`s()las #ara e$'a%i5ar 1)e a #alavra $o es%& se$do )sada em se) se$%ido de li$g)agem $a%)ral/ 0 )m (aso es#e(ial limi%ado de %i#o de'i$ido #elo )s)&rio. Em #ar%i()lar2 s)a im#leme$%a;o '7si(a deve e$volver e6a%ame$%e )m dos %i#os es(alares em3)%idos. A1)i %emos a si$%a6e #ara a de'i$i;o de )m %i#o DISTINCT? CREATE T@PE Z$ome de %i#o[ AS Z$ome de %i#o es(alar em3)%ido[ SINAL E Zo#;4es de (as%[ 1 Zlis%ae(omev7rg)las de es#e(i'i(a;4es de m0%odos[ 1 A1)i es%& )m e6em#lo? CREATE T@PE PES AS NU]ERIC *C21/ SINAL E6#li(a;o? 1. %i#o :erda os o#eradores de (om#ara;o 1)e se a#li(am ao %i#o s)3Aa(e$%e *is%o 02 o %i#o NU]ERIC/. Por0m2 o3serve 1)e os valores de PES so (om#arados )$s (om os o)%ros e (om $ada mais. Assim2 #or e6em#lo2 se PS 0 )ma vari&vel SQL do %i#o PES2 a (om#ara;o a seg)ir $o 0 v&lida? PC [ 182O Por0m2 s)#o$doNse 1)e %e$:am sido es#e(i'i(adas Zo#;4es de (as%[ a#ro#riadas *omi%imos os de%al:es a1)i/2 as (om#ara;4es a seg)ir2 em (o$%ras%e2 seriam am3as v&lidas? PS [ CAST * 182O AS PES CAST * PS AS NU]ERIC / [ 182O Al0m disso2 as d)as i$vo(a;4es de CAST mos%rados #oderiam ser a3reviadas #ara PES*182O/ e NU]ERIC*PS/2 res#e(%ivame$%e. No%a? os $omes de ')$;4es PES e NU]ERIC 'oram es#e(i'i(ados #elo de'i$idor de %i#o *$as Zo#;4es de (as%[./ 9 eles $o es%o im#l7(i%os $o $ome do %i#o 1)e es%& se$do de'i$ido o) $o $ome de se) %i#o s)3Aa(e$%e. >. 3serva;4es a$&logas a#li(am X a%ri3)i;o 9 is%o 02 )m valor PES #ode ser a%ri3)7do a#e$as a )m des%i$o do %i#o PES *e $e$:)m o)%ro #ode ser a%ri3)7do a %al des%i$o/. 3. %i#o PES $o :erda a)%oma%i(ame$%e o)%ros o#eradores do %i#o s)3Aa(e$%e. Co$%)do2 as Zes#e(i'i(a;4es de m0%odos[ *$e$:)ma mos%rada $o e6em#lo/ #ermi%em ao de'i$idor de %i#o es#e(i'i(ar +m0%odos. 9 (o$s)l%e a #rB6ima s)3se;o 9 1)e se a#li(am a valores e vari&veis do %i#o PES. Pro(edime$%os e ')$;4es (om)$s de SQL %am30m #odem ser de'i$idos #ara o#erar so3re valores e vari&veis do %i#o PES. Por e6em#lo2 #oder7amos de'i$ir )ma ')$;o (:amada S]APES 1)e somasse dois #esos #ara o3%er )m %er(eiro2 #ermi%i$do assim ao )s)&rio es(rever e6#ress4es (omo a seg)i$%e? S]APES * PC12 PS> / S]APES * PS12 PES * 182O 8. A es#e(i'i(a;o SINAL deve a#are(er. Co$s)l%e a s)3se;o imedia%ame$%e a seg)ir. Ti#os es%r)%)rados A o)%ra es#0(ie de %i#o de'i$ido #elo )s)&rio 0 )m %i#o es%r)%)rado. A1)i es%o dois e6em#los? P OOR P Na realidade o seg)$do e6em#lo 'al:a2 #or1)e BEHIN e END so #alavras reservadas. 9 CREATE T@PE PNT AS * c SLAT2 @ SLAT / SINAL CREATE T@PE SEHLIN AS * BEHIN PNT2 END PNT / SINAL E6#li(a;o? 1. Di5emos 1)e o %i#o PNT %em a%ri3)%os c e @ *1)e $o devem ser (o$')$didos (om os a%ri3)%os de %)#las e rela;4es de'i$idos $a Par%e II des%e livro/< da mesma 'orma2 di5emos 1)e o %i#o SEHLIN %em a%ri3)%os BEHIN e END. Um a%ri3)%o #ode ser de 1)al1)er %i#o (o$:e(ido. >. I$'eli5me$%e2 os a%ri3)%os me$(io$ados $a de'i$i;o de )m %i#o es%r)%)rado (o$s%i%)em a im#leme$%a;o '7si(a de valores do %i#o em 1)es%o2 $o )ma +re#rese$%a;o #oss7vel. $o se$%ido do Ca#7%)lo C. Desse modo2 os #o$%os $o e6em#lo so im#leme$%ados 'isi(ame$%e em %ermos de s)as (oorde$adas (ar%esia$as. 3. Cada de'i$i;o de a%ri3)%o (a)sa a)%oma%i(ame$%e a de'i$i;o de )m o#erador o3servador *em %ermos i$'irmais2 +ge%./ e de )m o#erador modi'i(ador *em %ermos i$'ormais2 +se%./2 #ara os 1)ais 0 )sada a si$%a6e de 1)ali'i(a;o de #o$%o.P Por e6em#lo2 seAam f2 P e LS vari&veis de SQL dos %i#os SLAT2 PNT e SEHLIN2 res#e(%ivame$%e. E$%o2 os i%e$s a seg)ir so %odos v&lidos? P.c ,P o3%0m o valor do (om#o$e$%e c do #o$%o P , LS.BEHIN.c ,P o3%0m o valor do (om#o$e$%e c do P, , #o$%o BEHIN do segme$%o de li$:a LS , SET P.c ^ f < ,P de'i$e o (om#o$e$%e c do #o$%o P (omo , o valor de f , SET LS.BEHIN.c ^ f < ,b de'i$e o (om#o$e$%e c do #o$%o BEHIN , ,P do segme$%o de li$:a LS (om o P, ,P valor de O P, 8. s `$i(os o#eradores dis#o$7veis #ara esses %i#os al0m dos me$(io$ados 9 #or1)e $o de'i$imos $e$:)m %i#o adi(io$al 9 so os o#eradores de (om#ara;o de ig)aldade e a%ri3)i;o2 dis#o$7veis #ara %odo %i#o. 3serve em #ar%i()lar 1)e os +sele%ores. PNT e SEHLIN *$o se$%ido do Ca#7%)lo C/ $o so de'i$idos de modo a)%om&%i(o e2 #or%a$%o2 1)e $o e6is%e $e$:)m li%eral PNT e SEHLIN. C. A es#e(i'i(a;o SINAL sig$i'i(a 1)e 1)al1)er %e$%a%iva de de'i$ir o)%ro %i#o (omo )m s)3%i#o a#ro#riado de 1)al1)er )m desses %i#os 'al:ar& *(o$s)l%e a se;o B.3/< is%o 02 esses %i#os so am3os %i#os 'ol:as e #erma$e(ero assim. D. s %i#os PNT e SEHLIN *o) %i#os es%r)%)rados em geral/ so +e$(a#s)lados.g I$'eli5me$%e2 a res#os%a a essa 1)es%o #are(e de#e$der do (o$%e6%o. Por e6em#lo2 1)a$do )m %i#o es%r)%)rado 'or )sado (omo o %i#o de alg)ma (ol)$a2 a res#os%a ser& sim *mais o) me$os/. Por0m2 1)a$do ele 'or )sado (omo o %i#o de alg)ma %a3ela 9 ver a Se;o B.8 9 a res#os%a ser& de'i$i%ivame$%e $o. No%a? a ra5o #ela di5emos +mais o) me$os. $o #rimeiro (aso 0 1)e2 mesmo $esse (aso2 os o#eraN dores +ge% e se%. e6#4em e'e%ivame$%e os a%ri3)%os do %i#o *(omo A& o3servamos/2 e esses o#eradores $o #odem ser a$)lados. Talve5 devamos )sar o %ermo +#se)doe$(a#s)lado. 9 o) %alve5 #se)doNes(alar #ara 'a5er re'er=$(ia ao #rimeiro (aso. A1)i es%& e$%o a si$%a6e geral #ara de'i$i;o de )m %i#o es%r)%)rado 1)e $o 0 )m s)3%i#o #rB#rio *(o$s)l%e a Se;o B.3 #ara ver )ma des(ri;o do (aso de s)3%i#o #rB#rio/? CREATE T@PE Z$ome de %i#o[ AS * Zlis%ae(omev7rg)las de de'i$i;4es de a%ri3)%os[ P Devemos o3servar 1)e o +modi'i(ador. $o 0 verdadeirame$%e )m modi'i(ador $o se$%ido do Ca#7%)lo C 9 is%o 02 )m o#erador de a%)ali5a;o #or1)e ele 0 de'i$ido #ara re%or$ar )m valor. As (o$se1L=$(ias *desagrad&veis/ desse 'a%o i$'eli5me$%e es%o al0m do es(o#o des%e 3reve a#=$di(e. Co$s)l%e a re'er=$(ia E3.3F #ara ver )ma des(ri;o de%al:ada. OO- E Zim#leme$%a;o de %i#o re'[ F E E NT F INSTANTIABLE 1 E NT 1 SINAL E Zlis%ae(omev7rg)las de es#e(i'i(a;4es de m0%odos[ F E6#li(a;o? 1. A Zlis%ae(omev7rg)las de de'i$i;4es de a%ri3)%os[ $o deve ser va5ia. >. A Zim#leme$%a;o de %i#o re'[ 0 dis()%ida $a Se;o B.8. 3. NT INSTANTIABLE sig$i'i(a 1)e o %i#o 0 )m %i#o d)mm_ $o se$%ido do Ca#7%)lo 1-. #adro 0 INSTANTIABLE. 8. NT SINAL sig$i'i(a 1)e o %i#o #ode %er s)3%i#os #rB#rios. SINAL sig$i'i(a 1)e $o #ode. C. s o#eradores 1)e se a#li(am a valores e vari&veis de )m de%ermi$ado %i#o es%r)%)rado T so? a. s o3servadores e modi'i(adores de a%ri3)%os des(ri%os a$%eriorme$%e. 3. A%ri3)i;o2 +^+ e #ossivelme$%e.Z. *os dois `l%imos desses o#eradores so am3os de'i$idos #or meio de )ma i$s%r);o se#arada2 CREATE RDERINH SR T2 em3ora $o es%eAa m)i%o (laro o mo%ivo #elo 1)al deve ser $e(ess&rio (riar )ma orde$a;o a#e$as #ara de'i$ir ++. (. s #ro(edime$%os e as ')$;4es de'i$idas #ara )sar )m #arYme%ro do %i#o T *o) de 1)al1)er s)#er%i#o #rB#rio desse %i#o 9 (o$s)l%e a Se;o B.3/. d. s m0%odos de'i$idos #ara )sar )m #arYme%ro de +des%i$o. es#e(ial do %i#o T o) 1)al1)er s)#er%i#o #rB#rio desse %i#o *mais )ma ve52 (o$s)l%e a Se;o B.3/. No%a? em $osso (aso os +m0%odos. so m0%odos $o se$%ido %radi(io$al de o3Ae%os *(o$s)l%e o Ca#7%)lo >8/ 9 is%o 02 so o#eradores 1)e %ra%am )m #arYme%ro (omo es#e(ial. Se o m0%odo ] 'or de'i$ido #ara %i#o Te c 'or )ma e6#resso do %i#o T2 e$%o ser& )sada a si$%a6e es#e(ial de 1)ali'i(a;o de #o$%o c.] #ara i$vo(ar ] so3re c. *S)#omos a1)i2 #or sim#li(idade 1)e ] $o )sa $e$:)m o)%ro #arYme%ro./ As Zes#e(i'i(a;4es de m0%odos[ de'i$em +assi$a%)ras de es#e(i'i(a;o. de m0%odo $o se$%ido dos Ca#7%)los 1- e >8. Por0m2 elas %am30m i$(l)em )ma gra$de 1)a$%idade de o)%ros ma%eriais2 se$do a maior #ar%e deles de $a%)re5a de im#leme$%a;o e *$a o#i$io des%e a)%or/ i$ade1)ados. (Bdigo real 1)e im#leme$%a os m0%odos 0 de'i$ido em o)%ro l)gar. B.3 QERAN!A DE TIP s)#or%e de SQL3 #ara a :era$;a de %i#o $o 0 m)i%o or%ogo$al2 #ois se a#li(a a#e$as a %i#os es%r)%)rados< ele $o admi%e a :era$;a de %i#o #ara %i#os em3)%idos2 geradosP o) DISTINCT. Al0m disso2 ele $o re(o$:e(e de modo alg)m a :era$;a m`l%i#la. Nes%a se;o2 (o$sideraremos a :era$;a de %i#o some$%e $o (aso de %i#os es%r)%)rados +#se)doNes(alares. *o 1)e #oderia ser (o$siderado )m (aso res#ei%&vel/< dei6amos o (aso de %i#os es%r)%)rados $o e$(a#s)lados #ara a Se;o B.C2 mais adia$%e. As maiores di'ere$;as lBgi(as e$%re o modelo de :era$;a de %i#o a#rese$%ado $o Ca#7%)lo 1- e a :era$;a de %i#o +#se)doN es(alar. da SQL3 so as seg)i$%es? \ A SQL3 admi%e a :era$;a es%r)%)ral (omo %am30m a (om#or%ame$%al. \ A SQL3 $o dis%i$g)e ade1)adame$%e e$%re valores e vari&veis< e$%o2 em #ar%i()lar2 ela $o dis%i$g)e e$%re a #ossi3ilidade de s)3s%i%)i;o de valores e a #ossi3ilidade de s)3s%i%)i;o de vari&veis. \ A SQL3 $o %em s)#or%e #ara res%ri;4es de %i#os e2 #or%a$%o2 $o %em $e$:)m s)#or%e #ara es#e(iali5a;o #or res%ri;o. PTalve5 (om e6e();o de %i#os de li$:as. Por0m2 e6is%em alg)$s 1)e3raN(a3e;as rela(io$ados (om a :era$;a de %i#o de li$:a2 ORJ ()Aos de%al:es es%o al0m do es(o#o des%e a#=$di(e. \ A SQL3 e6ige o#eradores de a%)ali5a;o *+modi'i(adores./ #ara 1)e a :era$;a seAa i$(o$di(io$al. Uma (o$se1L=$(ia dessas di'ere$;as 0 1)e a SQL3 #ermi%e +(7r()los $o (ir()lares. e %oli(es semel:a$%es2 (omo o3servamos $o (a#7%)lo 1-. )%ra (o$se1L=$(ia 0 1)e (er%as (om#ara;4es de SQL3 daro )m res)l%ado 'also 1)a$do deveriam o'ere(er )m res)l%ado verdadeiro *#or e6em#lo2 #or1)e )m valor do %i#o mais es#e(7'i(o ELIPSE #ode %er semiNei6os ig)ais e2 #or%a$%o2 (orres#o$der a )m (7r()lo $o m)$do real2 em SQL3/. KeAamos (omo 'i(aria $osso e6em#lo )s)al de eli#ses e (7r()los em SQL3? CREATE T@PE ELIPSE AS * C]PR A2 C]PR B2 PNT CTR NT SINAL CREATE T@PE CIRCUL EGNDER ELIPSE AS * C]PR R / 9 $o realis%aI *ver a seg)ir/ NT SINAL Co$%)do2 o3serve 1)e2 (om essas de'i$i;4es2 a im#leme$%a;o '7si(a do ChRCUL e$volver& 1)a%ro (om#o$e$%es 9 A2 B e CTR *:erdados do %i#o ELIPSE/2 e R *es#e(i'i(ado #ara o %i#o CIRCUL some$%e/. E (laro 1)e #ara 1)al1)er (7r()lo dado2 %r=s desses (om#o$e$%es %ero o mesmo valor. )%ra al%er$a%iva seria de'i$ir )m m0%odo R #ara o %i#o CIRCUL *em l)gar do a%ri3)%o R/< o %i#o CIRCUL %eria e$%o a mesma im#leme$%a;o '7si(a 1)e o %i#o ELIPSE e2 desse modo2 essa im#leme$%a;o e$volveria me$or red)$dY$(ia. Por o)%ro lado2 se C 0 )ma vari&vel do %i#o de(larado CIRCUL2 e$%o a a%ri3)i;o a C.R ser& v&lida (om o #rimeiro desses #roAe%os2 mas $o (om o seg)$do. Novame$%e2 a a%ri3)i;o a C.R2 se admi%ida2 #rod)5ir& 9 em geral 9 )m +(7r()lo. %al 1)e C.R e C.AI A1)i es%o mais alg)$s #o$%os de di'ere$;a e$%re o modelo de :era$;a de %i#o des(ri%o $o Ca#7%)lo 1- e a :era$;a de %i#o admi%ida em SQL3? \ A SQL3 )sa o %ermo +dire%o. *(omo em s)3%i#o dire%o/ em l)gar do %ermos mais ade1)ado +imedia%o.. \ A SQL3 )%ili5a o %ermo +s)#er%i#o m&6imo. em l)gar de +%i#o rai5.. \ A SQL3 admi%e )m o#erador de$omi$ado TREAT *a$&logo a TREAT DUN/. Por e6em#lo2 o a$&logo em SQL3 da e6#resso TREATeDUNeASeCIRCLE*E/ 0 TREAT E AS CIRCLE. \ A SQL3 %am30m admi%e )m o#erador 1)e #ode ser imagi$ado *sem rigor/ (omo +TREAT UP.. Por e6em#lo2 (o$sidere a seg)i$%e i$vo(a;o de o#erador? AREA * C AS ELIPSE A es#e(i'i(a;o +AS ELIPSE. 'or;a a verso ELIPSE do o#erador AREA a ser i$vo(ada2 mesmo 1)e o %i#o de(larado da vari&vel C seAa CIRCUL. No%a? esse o#erador sB #ode ser )sado em (er%os (o$%e6%os< #ara sermos es#e(7'i(os2 ele #ode ser )sado a#e$as #ara +%ra%ar. )m arg)me$%o #ara )ma i$vo(a;o de alg)m o#erador de'i$ido #elo )s)&rio2 (omo $o e6em#lo. 3servamos 1)e a #roviso dessa ')$(io$alidade #are(e s)gerir alg)ma (o$')so e$%re 1)es%4es de modelo vers)s 1)es%4es de im#leme$%a;o 9 a'i$al2 os )s)&rios $o devem $em mesmo %er de sa3er 1)e e6is%em d)as vers4es de AREA. \ A SQL3 %am30m admi%e )m m0%odo da 'orma c.TIPESPEChSIC2 1)e re%or$a o %i#o mais es#e(7'i(o de se) arg)me$%o c (omo )m s%ri$g de (ara(%eres. \ s a$&logos em SQL3 de ISeT*c/ e ISe]SeT*c/ so semel:a$%es a? c IS S * T / c IS S * NL@ T / OR1 B.8 TIPS DE RESERNCIA Ko(= deve lem3rar 1)e2 $o Ca#7%)lo >82 a'irmamos 1)e sis%emas de o3Ae%o e$volvem a#e$as )ma 3oa id0ia2 o) seAa2 o s)#or%e de %i#o de dados #rB#rio *o) d)as 3oas id0ias2 se (o$%armos a :era$;a de %i#o se#aradame$%e/. Como vimos2 a SQL3 i$(l)i )ma #ar%e dessa +3oa. ')$(io$alidade *em3ora se) s)#or%e es%eAa lo$ge do ideal/. Por0m2 i$'eli5me$%e2 ela %am30m i$(l)i alg)ma ')$(io$alidade (orrela%a 1)e 0 9 em $ossa o#i$io 9 m)i%o r)im. De 'a%o2 a SQL3 (:ega 3em #er%o de (ome%er %a$%o Primeiro Hra$de Erro *ig)ala$do %a3elas e (lasses/ 1)a$%o Seg)$do Hra$de Erro *mis%)ra$do #o$%eiros e %a3elas/. Al0m disso2 devemos di5er 1)e a +A)s%i'i(a%iva. #ara isso 0 #o)(o (lara2 #elo me$os #ara es%e a)%or< #are(e ser )m #o)(o mais 1)e )ma vaga id0ia de 1)e as (ara(%er7s%i(as em 1)es%o de alg)ma ma$eira %or$am a SQL3 mais +semel:a$%e a o3Ae%os.. SeAa (omo 'or2 vamos %e$%ar e6#li(ar agora 1)ais so os re()rsos realme$%e releva$%es. Em #rimeiro l)gar2 a SQL3 #ermi%e 1)e )ma %a3ela 3&si(a seAa de'i$ida2 $o a#e$as em %ermos de )m (o$A)$%o e6#l7(i%o de (ol)$as %i#i'i(adas $omeadas da ma$eira )s)al2 mas %am30m em %ermos de )m %i#o es%r)%)rado de'i$ido #elo )s)&rio. Por e6em#lo? CREATE T@PE TIP DEPT AS * DEPTM CQAR*3/2 DN]E CQAR*>C/2 RCA]EN DINQ / RES IS S@STE] HENERATED CREATE TABLE DEPT S TIP DEPT * RES IS IDDEPT S@STE] HENERATED2 PRI]AR@ TE@ * DEPTM /2 UNIQUE *IDDEPT/ / ... < E6#li(a;o? 1. Dada a de'i$i;o de )m %i#o es%r)%)rado T2 o sis%ema gera a)%oma%i(ame$%e )m %i#o de re'er=$(ia asso(iado *+%i#o RES./ (:amado RES*T/. s valores do %i#o RES!T/ so +re'er=$(ias. a li$a:s de %i#o T de$%ro de alg)ma %a3ela 3&si(aP 1)e %e$:a sido de'i$ida (omo +S. *de/ %i#o T *ver o i%em 3 a seg)ir/. No%a? E (laro 1)e T #ode ser )sado em o)%ros (o$%e6%os 9 #or e6em#lo2 (omo o %i#o de(larado de alg)ma vari&vel Ko) de alg)ma (ol)$a C. Todavia2 $e$:)m valor de RES*T/ es%& asso(iado a esses o)%ros )sos. >. A e6#resso RES IS S@STE] HENERATED em )ma i$s%r);o CREATE T@PE sig$i'i(a 1)e os valores reais do %i#o RES asso(iado so 'or$e(idos #elo sis%ema *o)%ras o#;4es 9 #or e6em#lo2 RES IS USER HENERATED 9 es%o dis#o$7veis2 mas omi%imos os de%al:es a1)i/. RES IS S@STE] HENERATED 0 o de'a)l%. 3. Uma %a3ela 3&si(a #ode ser de'i$ida *#or meio de CREATE TABLE/ (omo +S. *de/ alg)m %i#o es%r)%)rado. E$%re%a$%o2 a #alavraN(:ave S $o 0 realme$%e m)i%o a#ro#riada $esse (aso2 #or1)e a %a3ela $o 0 $a realidade +de. o %i#o em 1)es%o2 e $em s)as li$:as so desse %i#o.PP Em #ar%i()lar2 (ol)$as adi(io$ais al0m das +(ol)$as. *o) mel:or2 a%ri3)%os/ do #rB#rio %i#o es%r)%)rado #odem ser es#e(i'i(adas #ara a %a3ela. Na verdade2 #elo me$os )ma dessas (ol)$as adi(io$ais deve ser es#e(i'i(ada 9 o) seAa2 )ma (ol)$a do %i#o RES a#li(&vel 9 em3ora a si$%a6e #ara de'i$i;o dessa (ol)$a $o seAa a si$%a6e )s)al de de'i$i;o de (ol)$as2 mas sim algo (omo is%o? RES IS Z$ome de (ol)$a[ S@STE] HENERATED ) #ossivelme$%e alg)ma viso. s de%al:es do (aso de viso es%o al0m do es(o#o des%e a#=$di(e. P P E$%o2 o3serve em #ar%i()lar 1)e2 se o %i#o de(larado de alg)m #arYme%ro P #ara alg)m o#erador # 'or de alg)m %i#o es%r)%)rado T2 )ma li$:a de )ma %a3ela 3&si(a 1)e %e$:a sido de'i$ida (omo +S. %i#o T $o #oder& ser re#assada (omo )m arg)OR> me$%o (orres#o$de$%e a )ma i$vo(a;o desse o#erador #. Essa (ol)$a e6%ra 0 )sada #ara (o$%er IDs e6(l)sivas *+re'er=$(ias./ #ara as li$:as da %a3ela 3&si(a em 1)es%o *a es#e(i'i(a;o UNIQUE *Z$ome de (ol)$a[/ 0 im#l7(i%a2 em3ora %am30m #ossa ser e$)$(iada de 'orma e6#l7(i%a2 (omo em $osso e6em#lo/. A ID (orres#o$de$%e a )ma de%ermi$ada li$:a 0 a%ri3)7da 1)a$do a li$:a i$serida e #erma$e(e asso(iada (om essa li$:ad a%0 ser elimi$ada. No%a? a re#e%i;o da es#e(i'i(a;o S@STE] HENERATED 0 a#are$%eme$%e o3riga%Bria. *Talve5 de modo s)r#ree$de$%e2 )ma (ol)$a S@STE] HENERATED #ode ser )ma (ol)$a de des%i$o em )ma o#era;o INSERT o) UPDATE2 em3ora se a#li1)em (o$sidera;4es es#e(iais< vamos omi%ir os de%al:es a1)i./ Al0m disso2 $o es%& (laro o mo%ivo #or 1)e deve ser $e(ess&rio de'i$ir )ma %a3ela (omo +S. alg)m %i#o es%r)%)rado 9 em ve5 de a#e$as de'i$ir )ma (ol)$a a#ro#riada da ma$eira )s)al 9 #ara se o3%er a ')$(io$alidade de +TD e6(l)siva.. 8. Co$'orme i$di(amos $a Se;o B.>2 )m %i#o es%r)%)rado (omo TIP DEPT $o 0 (o$siderado e$(a#s)lado 1)a$do 0 em#regado (omo a 3ase #ara a de'i$i;o de )ma %a3ela 3&si(a2 em3ora seAa (o$siderado assim *mais o) me$os/ em o)%ros (o$%e6%os. Por essa ra5o2 $o e6em#lo2 a %a3ela 3&si(a DEPT %em 1)a%ro (ol)$as2 e $o a#e$as d)as (omo %eria se TIP DEPT 'osse e$(a#s)lado. C. ]os%ramos DEPTM (omo (:ave #rim&ria #ara a %a3ela DEPT. Por0m2 (o$sidera$doNse 1)e as li$:as de DEPT %=m IDs e6(l)sivas *+re'er=$(ias./2 #oder7amos )sar essas IDs (omo valores da (:ave #rim&ria2 se 1)is0ssemos2 assim? CREATE TABLE DEPT S TIP DEPT * RES IS IDDEPT S@STE] HENERATED2 PRI]AR@ TE@ * IDDEPT /2 UNIQUE * DEPTM / / Kamos agora es%e$der o e6em#lo #ara i$%rod)5ir )ma %a3ela 3asi(a E]Id2 des%e modo? CREATE TABLE E]P * E]PM CQAR*C/2 EN]E CQAR*>C/2 SALiRI DINQ2 IDEPT RES * TIP DEPT / SCPE DEPT RESERENCES ARE CQECTED N DELETE CASCADE2 PRI]AR@ TE@ * E]PM / / Normalme$%e2 a %a3ela 3&si(a E]P i$(l)iria )ma (ol)$a d( (:ave es%ra$geira DEPTM 1)e 'aria re'er=$(ia a de#ar%ame$%os #elo $`mero de de#ar%ame$%o. Co$%)do2 a1)i %emos )ma (ol)$a de +re'er=$(ia. ID DEPT 9 $o de(larada e6#li(i%ame$%e (omo )ma (ol)$a de (:ave es%ra$geira 9 1)e2 em ve5 disso2 'a5 re'er=$(ia a de#ar%ame$%os #or s)as +re'er=$(ias.. SCPE DEPT es#e(i'i(a a %a3ela re'ere$(iada a#li(&vel. RESERENCES ARE CQECTED sig$i'i(a 1)e a i$%egridade re'ere$(ial deve ser ma$%ida *RESERENCES ARE NT CQECTED #ermi%iria +re'er=$(ias os(ila$%es.< $o es%& (laro o mo%ivo #elo 1)al seria deseA&vel es#e(i'i(ar essa o#;o./ N DELETE ..2 es#e(i'i(a )ma regra de elimi$a;o2 a$&loga Xs regras )s)ais #ara elimi$a;o de (:aves es%ra$geiras *as mesmas o#;4es so admi%idas/< #or0m2 o3serve 1)e2 se de 'a%o a (ol)$a IDeDEPT $a %a3ela 3&si(a DEPT $o #ode ser a%)ali5ada *ver o i%em 3 a$%erior/2 e$%o $o 0 $e(ess&ria $e$:)ma regra N UPDATE (orres#o$de$%e. Kamos (o$siderar agora alg)$s e6em#los de (o$s)l%as e$volve$do esse 3a$(o de dados. Primeiro2 a1)i es%& )ma 'orm)la;o em SQL3 de +3%er o $`mero do de#ar%ame$%o (orres#o$de$%e ao em#regado Eld. E6is%e a1)i )ma (er%a rela;o (ir()lar? +essa li$:a. sB #ode sig$i'i(ar +a li$:a 1)e %em a ID es#e(7'i(a em 1)es%o.. 3serve a (o$')so de valor vers)s vari&velI OR3 SELECT Ec.ID DEPT N[ DEPTM AS DEPTM SR] E]P Ec UQERE Ec.E]PM ^ Ei 3serve a o#era;o de desre'ere$(iame$%o-P $a (l&)s)la SELECT *a e6#resso Ec.IDeDEPT DEPTM re%or$a o valor de DEPTM da li$:a de DEPT #ara a 1)al a#o$%a o valor de IDeDEPT em 1)es%o/. 3serve %am30m 1)e a es#e(i'i(a;o AS $essa (l&)s)la 0 mais o) me$os $e(ess&ria *se ela 'osse omi%ida2 a (ol)$a do res)l%ado re(e3eria )m $ome +de#e$de$%e da im#leme$%a;o./. Si$alme$%e2 o3serve a $a%)re5a $o i$%)i%iva da (l&)s)la SR] 9 o valor de DEPTM a ser re()#erado vem de DEPT2 $o de E]P2 mas os valores de IDeDEPT v=m de E]P2 e $o de DEPT. No%a? 0 di'7(il resis%ir X %e$%a;o de a'irmar 1)e essa (o$s)l%a #rovavelme$%e %er& )m ')$(io$ame$%o #ior 1)e s)a e1)ivale$%e em SQL (o$ve$(io$al *1)e %eria a(esso a a#e$as )ma %a3ela2 e $o a d)as/. Sa5emos essa o3serva;o #or1)e o arg)me$%o )s)al em 'avor de +re'er=$(ias. 0 1)e elas devem s)#os%ame$%e mel:orar o desem#e$:o. A #ro#Bsi%o2 se a (o$s)l%a 'osse +3%er o de#ar%ame$%o *em ve5 de a#e$as o $`mero do de#ar%ame$%o/ (orres#o$de$%e ao em#regado El.2 a o#era;o de desre'ere$(iame$%o seria 3as%a$%e di'ere$%e? SELECT DERES * Ec.IDDEPT / AS DEPT SR] E]P Ec UQERE Ec.E]PM ^ Eid < Al0m disso2 a i$vo(a;o de DERES mos%rada re%or$aria $o )m valor de li$:a2 mas sim )m valor +e$(a#s)lado. *es(alar/. A1)i es%& o)%ro e6em#lo 9 +3%er $`meros de em#regados (orres#o$de$%es a em#regados 1)e %ra3al:am $o de#ar%ame$%o Dl. *o3serve o desre'ere$(iame$%o $a (l&)s)la UQERE/? SELECT Ec.E]PM SR] E]P Ec UQERE Ec.IDDEPT N[ DEPTM ^ bDid E a1)i %emos )m e6em#lo de INSERT *i$ser;o de )m em#regado/? INSERT INT E]P * E]PM2 IDDEPT / KALUES * bEC2 * SELECT Dc.IDDEPT SR] DEPT Dc UQERE Dc.DEPTM ^ bD> / / < B.C SUBTABELAS E SUPERTABELAS Co$sidere os %i#os es%r)%)rados a seg)ir? CREATE T@PE TIP E]P AS *E]PM ...2 DEPTM ... / RES IS S@STE] HENERATED NT SINAL CREATE T@PE TIP PH]R UNDER TIP E]P AS * LANH ... / NT SINAL A #ro#Bsi%o2 o3serve 1)e TIPePH]R $o %em $e$:)ma (l&)s)la RES IS ...< em ve5 disso2 :erda e'e%ivame$%e )ma (l&)s)la desse %i#o de se) s)#er%i#o imedia%o *+dire%o./ TIPeE]P. P A maioria das li$g)age$s 1)e admi%em o desre'ere$(iame$%o %am30m o'ere(e s)#or%e #ara )ma o#era;o de re'ere$(iame$%o OR8 mas a SQL3 $o %em esse s)#or%e. Agora2 (o$sidere as de'i$i;4es de %a3elas 3&si(as a seg)ir? CREATE TABLE E]P S TIP E]P * RES IS IDE]P S@STE] HENERATED2 PRI]AR@ TE@ * E]PM /2 IGNIQUE * IDE]P / CREATE TABLE PH]R S TIP PH]R UNDER E]P No%e a es#e(i'i(a;o UNDER E]P $a de'i$i;o da %a3ela 3&si(a PH]R *$o%e %am30m a omisso de RES IS ...2 PRI]AR@ TE@2 e es#e(i'i(a;4es UNIQUE #ara essa %a3ela 3&si(a/. As %a3elas 3&si(as PH]R e E]P so2 res#e(%ivame$%e2 )ma s)3%a3ela e a s)#er%a3ela imedia%a *+dire%a./ (orres#o$de$%e< PH]R :erda as (ol)$as *e%(./ de E]P e a(res(e$%a )ma (ol)$a2 LANH2 de si mesma. A i$%)i;o 1)e rege o e6em#lo 0 1)e os $o #rogramadores %=m )ma li$:a $a %a3ela E]P a#e$as2 e$1)a$%o os #rogramadores %=m )ma li$:a em am3as as %a3elas 9 assim2 %oda 'ila em PH]R %em )ma e1)ivale$%e em E]P2 mas o i$verso $o 0 verdade. As o#era;4es de ma$i#)la;o de dados so3re essas %a3elas se (om#or%am da seg)i$%e ma$eira? \ SELECT? SELECT se (om#or%a $ormalme$%e so3re E]P. SELECT so3re PH]R se (om#or%a (omo se PH]R (o$%ivesse realme$%e as (ol)$as de E]P2 3em (omo a (ol)$a LANH. No%a? 1)ali'i(ador NL@ #ode ser )sado em )ma Zre'er=$(ia de %a3ela[ #ara e6(l)ir li$:as 1)e %=m e1)ivale$%es em alg)ma s)3%a3ela da %a3ela em 1)es%o. Desse modo2 #or e6em#lo2 a o#era;o SELECT ... SR] NL@ E]P se (om#or%a (omo se E]P i$(l)7sse a#e$as li$:as sem )ma e1)ivale$%e em PH]R. \ INSERT? INSERT em E]P se (om#or%a $ormalme$%e. INSERT em PH]R 'a5 (om 1)e2 $a realidade2 a#are;am $ovas li$:as em E]P e PH]R. \ DELETE? DELETE de E]P 'a5 (om 1)e desa#are;am li$:as de E]P e *1)a$do as li$:as em 1)es%o (orres#o$dem a #rogramadores/ %am30m de PH]R. DELETE de PH]R 'a5 (om 1)e desa#are;am li$:as de E]P e PH]R. \ UPDATE? A a%)ali5a;o de LANH2 $e(essariame$%e #or meio de PH]R2 a%)ali5a a#e$as PH]R< a a%)ali5a;o de o)%ras (ol)$as2 seAa a%rav0s de E]P o) de PH]R2 a%)ali5a *(o$(ei%)alme$%e/ am3as as %a3elas. 3serve as seg)i$%es im#li(a;4es da1)ilo 1)e a'irmamos? \ S)#o$:a 1)e o em#regado Goe se %or$e )m #rogramador. Se %e$%armos sim#lesme$%e i$serir )ma li$:a #ara Goe em PH]R2 o sis%ema %am30m %e$%ar& i$serir )ma li$:a #ara Goe em E]P 9 )ma %e$%a%iva 1)e 'al:ar&2 0 (laro. Em ve5 disso2 %emos de elimi$ar a li$:a de Goe de E]P e2 em seg)ida2 i$serir )ma li$:a a#ro#riada em PH]R. \ I$versame$%e2 vamos s)#or 1)e o em#regado Goe dei6e de ser )m #rogramador. Dessa ve52 %emos de elimi$ar a li$:a de Goe de E]P o) de PH]R *seAa 1)al 'or a %a3ela 1)e es#e(i'i(armos2 o e'ei%o ser& a elimi$a;o da li$:a de am3as/ e de#ois i$serir )ma li$:a a#ro#riada em E]P. Q)e rela;o %em %)do isso (om a :era$;a de %i#og A%0 o$de #odemos ver2 a res#os%a 0 $ada 9 is%o 02 $ada a $o ser 1)e *#or ra54es #o)(a (laras2 #ara di5er o m7$imo/ a SQL3 e6ige 1)e )ma s)3%a3ela e s)a s)#er%a3ela imedia%a *+dire%a./ seAam de'i$idas so3re %i#os es%r)%)rados 1)e so2 res#e(%ivame$%e2 )m s)3%i#o e se) s)#er%i#o imedia%o *+dire%o./. 3serve 1)e $o :& $e$:)ma #ossi3ilidade de s)3s%i%)i;o e$volvida $essa orga$i5a;o< o3serve ai$da 1)e os %i#os e$volvidos so de'i$i%ivame$%e $o +e$(a#s)lados.. E$%o2 em 1)e as s)3%a3elas e s)#er%a3elas $os aA)damg A res#os%a #are(e ser +m)i%o #o)(o. #elo me$os $o $7vel do modelo.P E verdade 1)e (er%as e(o$omias de im#leme$%a;o #oderiam ser o3%idas2 se P Talve5 dev=ssemos lem3r&Nlo de $ossa #rB#ria a3ordagem #re'ere$(ial #ara essa 1)es%o 9 se ela 0 realme$%e )ma 1)es%o 9 1)e 'a5 )so de vis4es *veAa o e6em#lo $o 'i$al da Se;o 13.C/. ORC a s)3%a3ela e s)a s)#er%a3ela es%ivessem 'isi(ame$%e arma5e$adas (omo )ma `$i(a %a3ela $o dis(o< #or0m2 0 (laro 1)e %ais (o$sidera;4es $o devem %er $e$:)m e'ei%o so3re o modelo em si. Em o)%ras #alavras2 $o a#e$as 0 #o)(o (laro2 (omo o3servamos $o #ar&gra'o a$%erior2 o mo%ivo #elo 1)al +s)3%a3elas. e +s)#er%a3elas. %e$:am de se 3asear em +s)3%i#os. e +s)#er%i#os. es%r)%)rados mas %am30m 0 m)i%o o3s()ro o mo%ivo #elo 1)al essa (ara(%er7s%i(a 0 admi%ida. B.D UTRS RECURSS CREATE TABLE A SQL3 admi%e )ma o#;o LITE em CREATE TABLE2 #ermi%i$do 1)e alg)mas o) %odas as de'i$i;4es de (ol)$as de )ma $ova %a3ela 3&si(a seAam (o#iadas de alg)ma %a3ela $omeada e6is%e$%e *o3serve a #alavra $omeada 9 $o 0 #oss7vel es#e(i'i(ar )ma e6#resso de %a3ela ar3i%r&ria em l)gar do $ome de %a3ela/. E6#ress4es de %a3elas No Ca#7%)lo C des(revemos )ma (l&)s)la UITQ ()Aa 'i$alidade 0 i$%rod)5ir $omes a3reviados #ara (er%as e6#ress4es. A SQL3 i$(l)i )ma (o$s%r);o similar2 mas se) )so es%& limi%ado some$%e a e6#ress4es de %a3elas. A1)i %emos )m e6em#lo? UITQ LNH TER] E]PS AS * SELECT P SR] E]P UQERE DATE QIRED Z DATE b1-RJNJ1NJ1 SELECT E]PM2 * LNHTER]CT 9 1 / AS MSSELLULNHTER]E]PS SR] LNH TER] E]PS AS Li2 * SELECT DEPTM2 CUNT*P/ AS LNHTER]CT SR] LNHTER]E]PS HRUP B@ DEPTM / AS L> UQERE L1.DEPTM ^ L>.DEPTM *+Para (ada em#regado 1)e es%& $a em#resa desde 1-O- o) a$%es2 o3%er o $`mero de em#regado e )ma (o$%agem de o)%ros em#regados $essa si%)a;o $o mesmo de#ar%ame$%o../ A (l&)s)la UITQ de SQL3 #ode ser )sada em #ar%i()lar #ara 'orm)lar (er%as (o$s)l%as re()rsivas. Por e6em#lo2 dada a %a3ela PAIeDE *PAI2 SILQ/2 a (o$s)l%a re()rsiva a seg)ir re%or$a %odos os #ares de #essoas *a23/ %ais 1)e a 0 a$(es%ral de 3. 3serve 1)e a de'i$i;o do $ome i$%rod)5ido ANCESTRAL DE i$(l)i )ma re'er=$(ia ao #rB#rio ANCESTRAL DE. UITQ RECURSIKE ANCESTRALeDE * ANCESTRAL2 DESCENDENTE AS * SELECT PAI2 SILQ SR] PAIeDE UNIN SELECT A.PAI2 P.SILQ SR] ANCESTRALeDE AS A2 PAIeDE AS P UQERE A.SILQ ^ P.PAI SELECT P SR] ANCESTRALeDE E6#ress4es (o$di(io$ais A SQL3 'or$e(e )ma $ova (o$di;o DISTINCT *1)e $o deve ser (o$')$dida (om a (o$di;o UNIQUE e6is%e$%e 9 (o$s)l%e o A#=$di(e A/ #ara %es%ar se d)as li$:as so +dis%i$%as.. SeAam as li$:as em 1)es%o ORD Es1)erda e Direi%a< Es1)erda e Direi%a devem (o$%er o mesmo $`mero2 digamos $2 de (om#o$e$%es (ada )ma. SeAam os iN0simos (om#o$e$%es de Es1)erda e Direi%a Ei e Di2 res#e(%ivame$%e *i ^ 12 >2 ...2 $/. %i#o de Ei deve ser (om#a%7vel (om o %i#o de Di. E$%o2 a e6#resso? Es1)erda IS DISTINCT SR] Direi%a re%or$a 'also se e some$%e se2 #ara %odo i2 *a/ +Ei ^ Di. 0 verdadeiro2 o) *3/ Ei e Di so am3os $)los< (aso (o$%r&rio2 ela re%or$a verdadeiro. *Em o)%ras #alavras2 Es1)erda e Direi%a so +dis%i$%as. se e some$%e se elas $o so +d)#li(a%as. )ma da o)%ra $o se$%ido do Ca#7%)lo 1R./ 3serve 1)e )ma (o$di;o DISTINCT $)$(a 0 avaliada #ara des(o$:e(ido. A SQL3 %am30m 'or$e(e )ma $ova (o$di;o SI]ILAR 1)e *(omo LITE/ se des%i$a X #a%%er$ ma%(:i$g de s%ri$gs de (ara(%eres< is%o 02 a %es%ar )m de%ermi$ado s%ri$g de (ara(%eres #ara ver se ele o3ede(e a alg)m #a%%er$ #res(ri%o. A di'ere$;a 0 SI]ILAR admi%e )ma variedade m)i%o mais e6%e$sa de #ossi3ilidades *+(ori$gas. *Wild (ards/2 e%(./ 1)e LITE. A si$%a6e 0? Ze6#resso de s%ri$gs de (ara(%eres[ E NT 1 SI]ILAR T Z#adro[ E ESCAPE Zes(a#e[ 1 As es#e(i'i(a;4es Z#a%%er$[ e Zes(a#e[ so esse$(ialme$%e (omo as de LITE2 e6(e%o #elo 'a%o de Z#a%%er$[ #oder i$(l)ir (ara(%eres es#e(iais adi(io$ais e $o a#e$as.. e +j+ (omo LITE2 mas %am30m ++2 +k+2 +N+ e m)i%os o)%ros. A i$%e$;o geral #are(e ser a de dar s)#or%e X a$&lise de e6#ress4es es(ri%as em alg)ma li$g)agem 'ormal. No%a? vale a #e$a me$(io$ar 1)e as regras #ara SI]ILAR 'oram (o#iadas do o#erador similar em PSIc. Se(:a$do es%a s)3se;o2 o3servamos 1)e2 (o$sidera$doNse a e6is%=$(ia do $ovo %i#o em3)%ido BLEAN2 as e6#ress4es (o$di(io$ais so agora realme$%e a#e$as )m %i#o es#e(ial de e6#resso es(alar *(omo de 'a%o elas deveriam %er sido desde o i$7(io/. I$%egridade A SQL3 admi%e a (o$s%r);o RESTRICT Za;o re'ere$(ial[2 semel:a$%e mas $o id=$%i(a a N ACTIN *(o$s)l%e o Ca#7%)lo R #ara o3%er )ma e6#li(a;o so3re a di'ere$;a/. Ela %am30m i$(l)i alg)m s)#or%e #ara #ro(edime$%os %rigger *+ga%il:os./< em #ar%i()lar2 ela i$(l)i )ma i$s%r);o CREATE TRIHHER2 a 1)al de'i$e )m ga%il:o 9 o) seAa2 )r$a (om3i$a;o de )ma es#e(i'i(a;o de eve$%o e )r$a es#e(i'i(a;o de a;o2 o$de? \ Um eve$%o 0 )ma o#era;o INSERT2 UPDATE *o#(io$alme$%e de (ol)$as de%ermi$adas/ o) DELETE so3re )ma %a3ela $omeada es#e(i'i(ada. \ a a;o 0 )r$a a;o *$a realidade2 )m #ro(edime$%o/ ser e6e()%ada ASTER *de#ois de/ o) BESRE *a$%es de/ o(orrer o eve$%o es#e(i'i(ado. ]ais #re(isame$%e2 a a;o (o$sis%e em )ma e6#resso (o$di(io$al o#(io$al *()Ao de'a)l% 0 TRUE/2 al0m de )m #ro(edime$%o em SQL 1)e ser& e6e()%ado se e some$%e se a (o$di;o 'or verdadeira 1)a$do o eve$%o o(orrer. )s)&rio #ode es#e(i'i(ar se a a;o deve a(o$%e(er a#e$as )r$a ve5 sB #or o(orr=$(ia do eve$%o o) )r$a ve5 SR EACQ RU *#ara (ada li$:a/ da %a3ela (om a 1)al o eve$%o es%& asso(iado. Al0m disso2 a es#e(i'i(a;o de a;o #ode se re'erir a valores de +a$%es. e +de#ois. $a %a3ela asso(iada (om o eve$%o es#e(i'i(ado2 'or$e(e$do assim )m $7vel #rimi%ivo de s)#or%e #ara *e$%re o)%ras (oisas/ res%ri;4es de %ra$si;o. A%)ali5a;o de vis4es A SQL3 es%e$de o s)#or%e de SQL #ara a%)ali5a;o de vis4es (om a 'i$alidade de i$(l)ir vis4es +UNIN ALL. e vis4es de A)$;4es de )m #ara )m e de )m #ara v&rios. E6%e$s4es a$&logas se a#li(am %am30m a ()rsores. ORO Here$(iame$%o de %ra$sa;4es A SQL3 i$(l)i diversos re()rsos $ovos de gere$(iame$%o de %ra$sa;4es? \ Uma i$s%r);o START TRANSACTIN e6#l7(i%a *(om os mesmos o#era$dos de SET TRANSACTIN 9 (o$s)l%e o Ca#7%)lo 18/. \ Uma o#;o UITQ QLD em DECLARE CURSR *mais )ma ve52 (o$s)l%e o Ca#7%)lo 18/. \ S)#or%e #ara #o$%os de grava;o *ver a a$o%a;o X re'er=$(ia E18.11F/. Seg)ra$;a A SQL3 admi%e #rivil0gios SELECT es#e(7'i(os de (ol)$as *o #rivil0gio +SELECT*6/. #ermi%e 1)e ao de%e$%or 'a5er re'er=$(ia a )ma (ol)$a 6 de%ermi$ada de )ma %a3ela $omeada es#e(7'i(a de$%ro de )ma Ze6#resso de %a3ela[/. Ela %am30m admi%e #a#0is *roles/ de'i$idos #elo )s)&rio< )m e6em#lo #oderia ser CNT2 sig$i'i(a$do as #essoas do de#ar%ame$%o de (o$%a3ilidade. Uma ve5 (riado2 )m #a#el #ode %er #rivil0gios (o$(edidos2 (omo se 'osse )ma ID de )s)&rio. Al0m disso2 os #a#0is #odem ser (o$(edidos2 (omo os #rivil0gios e2 (omo %odos os #rivil0gios2 eles #odem ser (o$(edidos a )ma ID de )s)&rio o) a o)%ro #a#el. Sal%a de I$'orma;4es Sa5emos a#e$as )ma o3serva;o so3 es%e %7%)lo? o) seAa2 1)e os $ovos re()rsos de %i#os da SQL3 so *de modo 3em #revis7vel/ (om#li(ados #ela #rese$;a de $)los. Por e6em#lo2 seAa K )ma vari&vel de alg)m %i#o es%r)%)rado T. E$%o2 0 #oss7vel 1)e alg)m (om#o$e$%e de K#ossa ser $)lo *e2 $esse (aso2 a e6#resso (o$di(io$al K ^ K dar& des(o$:e(ido/ e ai$da assim a e6#resso (o$di(io$al KIS NULL dar& 'alsoI De 'a%o2 #odemos di5er em geral 1)e2 se **K ^ K/ IS NT TRUE/ IS TRUE 0 verdadeira2 e$%o K0 $)la o) i$(l)i )m (om#o$e$%e $)lo. A#oio X de(iso A SQL3 i$(l)i o s)#or%e #ara as o#;4es HRUPINH SETS2 RLLUP e CUBE em HRUP B@2 (o$'orme des(revemos $o Ca#7%)lo >1. ORR