Escolar Documentos
Profissional Documentos
Cultura Documentos
DISCIPLINA:LinguagemdeProgramaodeBancodeDadosMdulo3
SQLDMLComandosAvanadosdeConsultaaoBancodeDadosVises
ComandoSelect
Estecomandopermiteconsultarosdadosnobancodedados.
Aestruturabsicadainstruodeconsultaselectconsisteemtrsclusulas:
select: usada para listar os atributos desejados no resultado da consulta, ou seja, as colunas requisitadas
comorespostas.Estalista,almdenomesdecolunas,podeconter:
umasterisco(*),indicandoquetodasascolunasdevemserretornadas
expresses
constantes
funes
qualquercombinaodestes,conectadasporoperadoresaritmticoseparnteses
Umselectqueresulteumvalornico,quepodetercritriodeseleobaseadoemvalordelinha
selecionada.
from:Lista as tabelas a serem examinadas na avaliao da expresso. As colunas referenciadas na clusula
selectounaclusulawhere,abaixo,devemconstarnastabelaslistadasnestaclusula.
where: Consiste de uma condio de procura envolvendo atributos das tabelas que aparecem na clusula
from.olugarondeserestringeouselecionaquaislinhasdeveroserretornadas.Podeconterumselect
queresulteemvaloresquepodemserutilizadosnocritriodeseleo.
Usodesubqueries
Umcomandoselectpodeconteroutroscomandosselect,conformedescritoacima.
Subselectnaprojeodecolunasselecionadas
Nalistadecolunasselecionadaspodeseutilizarumselect,queserexecutadoumavezparacadalinharesultante
doselectprincipal.
SelectCodEmpregado,Nome,(selectNomefromDepartamentowhereCodigo=Depto_Empregado)asNome_Depto
fromEmpregado
Resulta3colunas:CdigoeNomedecadaempregadoeNomedoDepartamentoondetrabalhacadaempregado.
Subselectnaclusulawhere
Oresultadodeumselect,desdequecompatvelcomocontexto,podeserutilizadonacondiodowheredeum
select.
SelectCodEmpregado,NomefromEmpregado
whereSalario>(Selectavg(salario)fromEmpregado)
Resultaosempregadoscomsalariomaiordoqueamediadossalriosdetodososempregados.
Outrostiposdepredicadosquepermitemousodesubselect:
EXISTS
IN
PredicadoExists
utilizadoparatestarseoconjuntodelinhasresultantesdeumaconsultavazio.Sintaxe:
|not|exists<subselect>
select*fromCargo
whereexists(select* fromEmpregadowhereEmpregado.CodCargo=Cargo.Codigoandsalario>1000)
Osubselectresultaverdadeiro(existe)oufalso(noexiste).ParacadavalordeCargo.Codigoqueresulta
verdadeiro,osdadosdocargoretornamnoresultadodoselect.
PredicadoIN
Opredicadoincomparaumvalorcomumconjuntodevalores.Esteconjuntodevalorespodeserumalistaouo
resultadodeumsubselect.
<expresso>|not|in<subselect>
ou
<expresso>|not|in<listadevalores>
select*
fromEmpregado
whereCodEmpregadoin(100,101,102,103)
Empregadoscomumdos4cdigosespecificados.
select*
fromDepartamento
whereCodigoin(selectCodDeptofromEmpregadowheresalario>1000)
Departamentosquepossuemempregadoscomsalario>1000.
Junodetabelas
Tabelasrelacionadasporchaveestrangeirapodemseracessadasjuntas(joined)emummesmoselect.
TodasascolunasdecadaumadastabelaspodemserapresentadasnoSelectepodemserutilizadasnascondies
dowhere.
Nowhereprecisaestaraseguinteigualdade,paracadaduastabelas:
tabela1.chave_primaria=tabela2.chave_estrangeira
selectEmpregado.Nome,Cargo.Nome,Departamento.Nome
fromEmpregado,Cargo,Departamento
whereCargo.Codigo=Empregado.CodCargo
andDepartamento.Codigo=Empregado.Cod.Depto
TodososEmpregadoscomosdados(codigoenome)doseucargoedoseudepartamento.
Todasostiposdepredicadospodemseracrescentadosaclusulawhere.
selectEmpregado.Nome,Cargo.Nome,Departamento.Nome
fromEmpregado,Cargo,Departamento
whereCargo.Codigo=Empregado.CodCargo
andDepartamento.Codigo=Empregado.Cod.Depto
andEmpregado.Nomelike'%Silva%'
andDepartamento.Codigoin('Contab','RH','Compras')
TodososEmpregadoscomSilvanonomeecdigododepartamentonalistaespecificada.
RenomeaodasTabelasnoSelect
Noselectosnomesdatabelaspodemsersubstitudosporapelidos
selectE.Nome,C.Nome,D.Nome
fromEmpregadoE,CargoC,DepartamentoD
whereC.Codigo=E.CodCargo
andD.Codigo=E.Cod.Depto
Innerjoin
Ajunodetabelasbaseadanaigualdadechave_primaria=chave_estrangeiradenominadainnerjoin(juno
interna)epodeserescritadaforma
selectE.Nome,C.Nome,D.Nome
fromEmpregadoEinnerjoinCargoConC.Codigo=E.CodCargo
innerjoinDepartamentoDonD.Codigo=E.CodDepto
Aclusulawheresomenteserutilizadaparafiltrarlinhasresultantes.Aigualdadeentrechaveprimriaechave
estrangeiraestestabelecidanaclusulainnerjoinon.
Oresultadodeuminnerjoinseroaslinhasqueatendamacondiodeigualdadeentrechave_primriae
chave_estrangeira.
Noexemplo,EmpregadosquetenhamCodCargoouCodDeptonulosnoapareceronoresultado.
Outerjoin
Paraquelinhasdeumatabelaquenoserelacionamcomnenhumalinhadasdemaistabelasparticipantesda
junoapareamnoresultado,utilizaseoouterjoin(junoexterna).
selectEmpregado.Nome,Cargo.Nome,Departamento.Nome
fromEmpregado,Cargo,Departamento
whereCargo.Codigo=Empregado.CodCargo (+)
andDepartamento.Codigo=Empregado.CodDepto (+)
O(+)indicaquenomedosempregadosquenaEmpregadotenhamCodCargoe/ouCodDeptonulosaparecerona
listaresultante,semnomedecargoounomededepartamento.
Essemesmoselectpodeserescritodaforma:
selectE.Nome,C.Nome,D.Nome
fromEmpregadoErightouterjoinCargoConC.Codigo=E.CodCargo
rightouterjoinDepartamentoDonD.Codigo=E.CodDepto
OperaesdeConjuntos
Algebrarelacional,naqualaSQLsebaseia,incluiasoperaesunion,intersecteminus,parajunesde
conjuntos.Entretanto,apenasainstruounionfoiincludanopadroANSIdalinguagemSQL.Istonochegaa
serumproblema,poisainstruointersectpodeserrealizadacomaconstruoin,eaminuscomanotin.
Parademonstrarmosautilidadedainstruounion,vamosconsiderarqueaseguinteconsultasejarequisitada:
forneatodososcdigosdosfuncionriosqueprovocaramqualquermovimentaonoestoque,ouseja,uma
requisioouumadevoluo.
Pararecuperarmososfuncionriosquerequisitaramprodutos,utilizaramosaseguinteinstruo:
selectCOD_FUNCIONARIO
fromREQUISICAO
Paraaquelesquedevolveramalgumproduto:
selectCOD_FUNCIONARIO
fromDEVOLUCAO
Agoraparafazermosauniodestesdoisconjuntosdevalores,utilizamosooperadorunion.Assimainstruo
resultante:
selectCOD_FUNCIONARIO
fromREQUISICAO
union
selectCOD_FUNCIONARIO
fromDEVOLUCAO
Seaconsultafosseoscdigosdosfuncionriosqueparticiparamdeumarequisioedeumadevoluo,teramos:
selectCOD_FUNCIONARIO
fromREQUISICAO
intersect
selectCOD_FUNCIONARIO
fromDEVOLUCAO
Omesmoresultadoobteramoscomaseguintesentena:
selectCOD_FUNCIONARIO
fromREQUISICAO
whereCOD_FUNCIONARIOin(selectCOD_FUNCIONARIOfromDEVOLUCAO)
Seaconsultafosseparaobteroscdigosdosfuncionriosqueparticiparamdealgumarequisio,masno
participaramdenenhumadevoluo,teramos:
selectCOD_FUNCIONARIO
fromREQUISICAO
minus
selectCOD_FUNCIONARIO
fromDEVOLUCAO
Omesmoresultadoobteramoscomaseguintesentena:
selectCOD_FUNCIONARIO
fromREQUISICAO
whereCOD_FUNCIONARIOnotin(selectCOD_FUNCIONARIOfromDEVOLUCAO)
Portantopudemoscomprovarquetantoaoperaointersectcomoaoperaominuspodemserrealizadasem
construesanlogasutilizandoinenotin,respectivamente.
importanteressaltarqueooperadoruniontrataastabelascomoconjuntos,epelaregradeuniodeconjuntos,
valoresduplicadossodescartados.Assim,seumfuncionriorequisitouedevolveualgumproduto,eleaparecer
apenasumaveznalistaresultante.Casosejanecessriomanterasduplicaes,deveseutilizarooperadorunion
allaoinvsdeunion.
Ouniodeselectspodeserparticularmentetilnaclassificaodeinformao:
SelectCod_Empregado,Nome,'PrecisaMuitoAumento'asSituacao
fromEmpregadowheresalario<1000
union
SelectCod_Empregado,Nome,'PrecisaPoucoAumento'asSituacao
fromEmpregadowheresalariobetween1000and3000
union
SelectCod_Empregado,Nome,'NoPrecisaAumento'asSituacao
fromEmpregadowheresalario>3000;
Vises
Umaviso(VIEW)consistebasicamentedeumatabelalgicaderivadadeoutrastabelas.Abaseparaaconstruo
deumaviewocomandoSELECT.
Aviewnoexistefisicamentecomotabela,pormpodeseracessadacomosefosseumatabelareal.
Sintaxe:
CREATEVIEW<nomedaviso>
AS<subselect>
Osubselectpodeacessarmaisdeumatabelae,comexceodeORDERBY,todasasestruturaseclusulasde
umselectpodemserutilizadas.
Devemosobservarque:
1Umavisodefinidasobreumanicatabelasomenteseratualizvelseosatributosdatalvisocontiverema
chaveprimriadetaltabela.
2Visesquejuntam(join)vriastabelasnosopassveisdeatualizaes.
3Visesqueseutilizamdefunesdeagrupamentos,tambmnopoderoseratualizadas.
Restriessobreumaview:
Viewsomenteparaconsulta:
CREATEVIEW<nomedaviso>
AS<subselect>
WITHREADONLY
Limitaodeinseresoumodificaes:
Aplicvelaviewssobreumanicatabela,quepodemterlinhasincludasoualteradas,garantindoquenovaslinhas
oulinhasalteradascontinuemdentrodascondiesdaview
CREATEVIEW<nomedaviso>
AS<subselect>
WITHCHECKOPTION
Exemplos:
Tabelasbase:
Departamento(Codigonumber(2)primarykey,Nomechar(15),Gerentenumber(5),Divisaochar(10),
Localchar(15))
Empregado(IDNUMBER(5),Nomevarchar2(20),Deptonumber(2),Cargochar(6),Tempo_empnumber(2),
Salarionumber(8,2),Comissaonumber(7,2))
1. VisodeEmpregado,mostrandoseunomeenomedodepartamento
CREATEVIEWvisao_ex01
ASSELECTE.nomeNome_Emp,D.NomeNome_Depto
FROMEmpregadoE,DepartamentoD
WHEREE.depto=D.codigo
Usodaview:
ListarosnomesdosempregadosquetrabalhamnodepartamentocomnomeCOMPRAS
SELECTNome_Emp
FROMVISAO_EX01
WHEREnome_depto=compras
2. VisodeEmpregado,somenteparaconsultas,mostrandotodososseusdadosmenososalrioecomisso
CREATEVIEWvisao_ex02
ASSELECTID,Nome,Depto,Cargo,Tempo_emp
FROMEmpregado
WITHREADONLY
3. VisodeEmpregado,mostrandotodososseusdados,dosempregadoscomsalrioabaixode15000
CREATEVIEWvisao_ex03
ASSELECT*FROMEmpregado
WHEREsalario<15000WITHCHECKOPTION
AinclusodeumanovalinhanatabelaEMPREGADOatravsdainclusonaviewVISAO_EX03possvel,desde
queacondioSALARIO<15000sejarespeitada.
AexclusodelinhasnatabelaEMPREGADOpodeserfeitaatravsdaexclusonaviewVISAO_EX03.
AalteraodelinhasnatabelaEMPREGADOatravsdaalteraodelinhasdaviewVISAO_EX03
possvel,desdequeacondioSALARIO<15000sejarespeitada.
Alteraodeumaview:
ParaalteraradefiniodeumaViewelaprecisaserrecriada:
CREATEORREPLACEVIEW<nomedavisoexistente>
AS<subselect>
[WITHREADONLY]
[WITHCHECKOPTION]
Eliminaodeumaview:
DROPVIEW<nomedavisoexistente>
Bibliografia
Cap 3,4 SILBERSCHATZ, A. KORTH, H. SUDARSHAN, S. Sistemas de bancos de dados. So Paulo: Makron
Books,1999.
Cap6GUIMARES,C.A.,FundamentosdeBancosdeDadosModelagem,ProjetoelinguagemSQL,Campinas,
EditoradaUnicamp,2008
Exerccio1:
Umaempresadefiniuumbancodedadosparaarmazenarosseusdadosorganizacionais,jtendodefinidoastabelas:
Departamento(Codigo,Nome)eEmpregado(Cod_emp,Nome_emp,Salario_emp,Cod_depto_emp)
ondeCod_depto_empumachaveestrangeiraquereferenciaDepartamento.Osdadosaindaestosendoincludosnas
tabelas,masjforamcadastradosvriosdepartamentosevriosempregados.Parasaberquantosempregadosjesto
cadastradosemcadadepartamentoforamescritosdoiscomandosSQL:
I)selectD.Nome,(selectcount(*)fromEmpregadowherecod_depto_emp=D.Codigo)asQtde
fromDepartamentoD
II)selectD.Nome,count(*)asQtde
fromDepartamentoDinnerjoinEmpregadoEonD.Codigo=E.Cod_depto_emp
groupbyD.Nome
Sobreosdoiscomandosacimapodeseafirmar:
AOsdoiscomandosapresentamresultadomasnenhumdosdoiscomandosapresentaoresultadosolicitado
BOcomandoIapresentaoresultadomaiscompletoporque,almdeapresentartudoqueocomandoII
apresenta,tambmapresentaosDepartamentoscomzeroempregados,sehouver
COsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
DOsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
EOcomandoIIapresentaoresultadoesperado.OcomandoInoexecutvelporerro
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio2:
Nobancodedadosdeumaempresaestodefinidasastabelas:
Departamento(Codigo,Nome)eEmpregado(Codemp,Nomeemp,Salario,Coddeptoemp)
ondeCoddeptoempumachaveestrangeiraquereferenciaDepartamentoeidentificaodepartamentoondeoempregado
trabalha.AnaliseodoiscomandosSQLabaixoquetemcomoobjetivomostrar,paracadaempregado,oseunomeeocdigoe
onomedodepartamentoondetrabalha:
I)selectE.Nome,(selectD.Codigo,D.NomefromDepartamentoDwhereD.Codigo=E.Coddeptoemp)
fromEmpregadoE
II)selectE.Nome,E.Coddeptoemp,(selectD.NomefromDepartamentoDwhereD.Codigo=E.Coddeptoemp)
fromEmpregadoE
Sobreosdoiscomandosacimapodeseafirmar:
AOsdoiscomandosapresentamresultadomasnenhumdosdoiscomandosapresentaoresultadosolicitado
BOcomandoInoexecutvelporerroeocomandoIIexecutamasnoapresentaoresultadosolicitado
COsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
DOcomandoIapresentaoresultadoesperado.OcomandoIInoexecutvelporerro
EOcomandoIIapresentaoresultadoesperado.OcomandoInoexecutvelporerro
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio3:
Nobancodedadosdeumaempresaestodefinidasastabelas:
Departamento(Codigo,Nome)eEmpregado(Codemp,Nomeemp,Salario,Coddeptoemp)
ondeCoddeptoempumachaveestrangeiraquereferenciaDepartamentoeidentificaodepartamentoondeoempregado
trabalha.AnaliseodoiscomandosSQLabaixoquetemcomoobjetivomostrarosnomesdosdepartamentosondetrabalham
empregadoscomsalriomenordoqueamdiasalarialdaempresa:
I)SelectD.Nome
fromDepartamentoD
whereexists(select*fromempregadoEwhereE.Coddeptoemp=D.codigoandE.salario<(selectavg(salario)from
empregado))
orderbyD.nome
II)selectdistinctD.Nome
fromDepartamentoD,EmpregadoE
whereD.codigo=E.CoddeptoempandE.salario<(selectavg(salario)fromempregado)
orderbyD.nome
Sobreosdoiscomandosacimapodeseafirmar:
AOsdoiscomandosapresentamresultadomasnenhumdosdoiscomandosapresentaoresultadosolicitado
BOcomandoInoexecutvelporerroeocomandoIIexecutamasnoapresentaoresultadosolicitado
COsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
DOcomandoIapresentaoresultadoesperado.OcomandoIInoexecutvelporerro
EOcomandoIIapresentaoresultadoesperado.OcomandoInoexecutvelporerro
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio4:
4)Nobancodedadosdeumaempresaestodefinidasastabelas:
Departamento(Codigo,Nome,Codgerente)eEmpregado(Codemp,Nomeemp,Salario,Coddeptoemp)
ondeCoddeptoempumachaveestrangeiraquereferenciaDepartamentoeidentificaodepartamentoondeoempregado
trabalhaeCodgerenteumachaveestrangeiraquereferenciaEmpregadoeidentificaogerentedodepartamento.Analiseo
doiscomandosSQLabaixoquetemcomoobjetivomostrarosnomesesalriosdosempregadoseonomedoseu
departamento,paraosempregadosquetemsalriomaiordoqueosalriodogerentedodepartamentosondetrabalham:
I)selectE.Nome,E.Salario,D.Nome
frpomEmpregadoE,EmpregadoG,DepartamentoD
whereECoddeptoem=D.CodigoandD.CodGerente=G.Codemp
andE.salario>G.salario
II)selectE.Nome,E.Salario,D.Nome
fromEmpregadoE
innerjoinDepartamentoDonE.Coddeptoemp=D.Codigo
innerjoinEmpregadoGonD.CodGerente=G.codemp
whereE.salario>G.salario
Sobreosdoiscomandosacimapodeseafirmar:
AOsdoiscomandosapresentamresultadomasnenhumdosdoiscomandosapresentaoresultadosolicitado
BOcomandoInoexecutvelporerroeocomandoIIexecutamasnoapresentaoresultadosolicitado
COsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
DOcomandoIapresentaoresultadoesperado.OcomandoIInoexecutvelporerro
EOcomandoIIapresentaoresultadoesperado.OcomandoInoexecutvelporerro
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio5:
Umaempresadecomrcioeletrnicopossuidepsitosdeprodutosemdiferentesregiesdopas.Osdadosdosprodutos
comercializadoseestoquesdisponveisestoarmazenadosnasseguintestabelas:
Produto(Codigo,Nome,UnidMedida,PrecoUnit)
Deposito(Codigo,Nome,Cidade)
EstoqueProd(CodProd,CodDeposito,QtdeEstoque),ondeCodProdeCodDepositosochavesestrangeirasreferenciandoas
tabelasProdutoeDeposito,respectivamente.
Parafazerumaanlisedasituaodeestoquedosprodutosfoisolicitadoumrelatrioorganizadopornomededepsitoe
cdigodeproduto,queapresenteosdepsitoseprodutosondeoestoqueestcommenosdoque10unidades.Oseguinte
comandoSQLestsendomontado,masaindaestincompleto.
SelectD.Codigo,D.Nome,P.Codigo,P.Nome,E.QtdeEstoque
fromDepositoD,ProdutoP,EstoqueProdE
(1)_______________
(2)_______________
Escolhaaopoquecompletaaslinhasidentificadaspor(1)e(2)nocomandoacimademodoqueeleretorneoresultado
solicitado:
A(1)whereD.Codigo=E.CodDepositoandP.Codigo=E.CodProdandE.QtdeEstoque<10(2)orderby
D.Nome,P.Codigo
B(1)whereD.Codigo=E.CodDepositoandP.Codigo=E.CodProdandE.QtdeEstoque<10(2)group
byD.Nome,P.Codigo
C(1)whereE.QtdeEstoque<10(2)orderbyD.Nome,P.Codigo
D(1)whereD.Codigo=E.CodDepositoandP.Codigo=E.CodProdandE.QtdeEstoque<10(2)linhaem
branco
E(1)whereE.QtdeEstoque<10(2)groupbyD.Nome,P.Codigo
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio6:
Umaempresadecomrcioeletrnicopossuidepsitosdeprodutosemdiferentesregiesdopas.Osdadosdosprodutos
comercializadoseestoquesdisponveisestoarmazenadosnasseguintestabelas:
Produto(Codigo,Nome,UnidMedida,PrecoUnit)
Deposito(Codigo,Nome,Cidade)
EstoqueProd(CodProd,CodDeposito,QtdeEstoque),ondeCodProdeCodDepositosochavesestrangeirasreferenciandoas
tabelasProdutoeDeposito,respectivamente.
ParaavendadeumprodutodecdigoP103,desejasesaberosnomesdosdepsitosquepossuemtalprodutoemestoque.O
seguintecomandoSQLestsendomontado,masaindaestincompleto.
SelectD.Nome,E.QtdeEstoque
(1)_______________
(2)_______________
Escolhaaopoquecompletaaslinhasidentificadaspor(1)e(2)nocomandoacimademodoqueeleretorneoresultado
solicitado:
A(1)fromDepositoD,EstoqueProdE(2)whereD.codigo=E.CodDepositohavingE.CodProd='P103'
B(1)fromDepositoD,EstoqueProdE(2)whereE.CodProd='P103'
C(1)fromDepositoD,EstoqueProdE(2)whereD.codigo=E.CodDepositoandE.CodProd='P103'
D(1)fromDepositoD,EstoqueProdE(2)linhaembranco
E(1)fromDepositoD,EstoqueProdE,ProdutoP(2)whereP.codigo=E.CodProdandP.Codigo='P103'
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios
Exerccio7:
Umaempresadecomrcioeletrnicopossuidepsitosdeprodutosemdiferentesregiesdopas.Osdadosdosprodutos
comercializadoseestoquesdisponveisestoarmazenadosnasseguintestabelas:
Produto(Codigo,Nome,UnidMedida,PrecoUnit)
Deposito(Codigo,Nome,Cidade)
EstoqueProd(CodProd,CodDeposito,QtdeEstoque),ondeCodProdeCodDepositosochavesestrangeirasreferenciandoas
tabelasProdutoeDeposito,respectivamente.
PararealizarumagrandevendadeumprodutodecdigoAB902desejasesaberototaldeestoquedetalprodutoemtodosos
depsitos.ParaobteresseresultadoforamescritosdoiscomandosSQL:
I)SelectP.nome,sum(E.QtdeEstoque)TotalEstq
fromEstoqueProdE,ProdutoP
whereP.Codigo=E.CodProdutoandP.Codigo='AB902'
groupbyP.nome
II)Select(SelectP.nomefromProdutoPwhereP.Codigo='AB902')Nome,sum(E.QtdeEstoque)TotalEstq
fromEstoqueProdE
whereE.CodProduto='AB902'
Sobreosdoiscomandosacimapodeseafirmar:
AOsdoiscomandosapresentamresultadomasnenhumdosdoiscomandosapresentaoresultadosolicitado
BOcomandoInoexecutvelporerroeocomandoIIexecutamasnoapresentaoresultadosolicitado
COsdoiscomandosapresentamresultadosiguais,emqualquersituaodosdados
DOcomandoIapresentaoresultadoesperadoeocomandoIIexecutamasnoapresentaoresultadosolicitado
EOcomandoIIapresentaoresultadoesperado.OcomandoIexecutamasnoapresentaoresultadosolicitado
Comentrios:
EssadisciplinanoEDouvocnofezcomentrios