CursoSQL Firebird RafaelGoulart

Download CursoSQL Firebird RafaelGoulart

Post on 23-Aug-2014

141 views

Category:

Documents

58 download

TRANSCRIPT

CursoSQLPorRafaelGoulart Verso1.0maio/2006ndiceIntroduo.............................................................................................................................................3 OrganizaodoCurso......................................................................................................................3 Agradecimentos...............................................................................................................................3 RefernciasUtilizadas.................................................................................................................3 ConceitosGeraisdeSQL.....................................................................................................................5 OqueSQL....................................................................................................................................5 SGDBSistemadeGerenciamentodeBancodeDados.................................................................5 BancosdeDadosRelacionais..........................................................................................................6 Tabelas.........................................................................................................................................6 Registros(outupla).....................................................................................................................6 Colunas(AtributosouCampos)..................................................................................................6 Domnio(TiposdeDados)..........................................................................................................7 Chave...........................................................................................................................................7 ndices.........................................................................................................................................7 Relacionamentos.........................................................................................................................7 ALinguagemSQLTiposdePalavrasChave................................................................................8 DDL(DataDefinitionLanguage)LinguagemdeDefiniodeDados....................................8 DML(DataManipulationLanguage)LinguagemdeManipulaodeDados.........................8 DCL(DataControlLanguage)LinguagemdeControledeDados..........................................9 SQLemFIREBIRDIntroduo.......................................................................................................10 HistriadoFIREBIRD..................................................................................................................10 ObtendoeInstalandoFIREBIRDeFerramentas...........................................................................10 IBOConsolecomandosbsicos...................................................................................................10 RegistrandoumServidor...........................................................................................................10 RegistrandoumServidorLocal(localhost)...............................................................................11 RegistrandoumServidorRemoto.............................................................................................12 Criando/RegistrandoumBancodeDadosnoServidor.................................................................12 CriandoumBancodeDadosnoServidor.................................................................................14 RegistrandoumBancodeDadosnoServidor..........................................................................15 TeladeAcessoaoBanco................................................................................................................16 ManutenodeUsurios................................................................................................................17 ManutenodeTabelas..................................................................................................................18 ExecutandocomandosSQL...........................................................................................................21 SQLBsico.........................................................................................................................................23 Algunspadresdesintaxe.............................................................................................................23 SQLDDLBsico(ManipulandoObjetosdoBD)..............................................................................24 CriandoumBancodeDados(CREATEDATABASE).................................................................24 ConectandoaumBancodeDados(CONNECT)..........................................................................24 CriandoTabelas(CREATETABLE).............................................................................................24 TiposdeDados(DomniosPadro)doFIREBIRD..................................................................25 SintaxeCREATETABLE(CriarTabela).................................................................................25 Opescomunsparacamposnacriaodetabelas.............................................................26 Criandochavesprimrias(PKPrimaryKey).........................................................................26Criandochavesestrangeiras(FKForeingKey)......................................................................26 ChavesPrimriasAutonumeradas.............................................................................................27 AlterandoTABELAS(ALTERTABLE).......................................................................................28 ExcluindoTABELAS,BANCOSeoutrosobjetos........................................................................29 SQLDMLBsico(ManipulandoDados)...........................................................................................29 InserindoDados(INSERT)...........................................................................................................29 SelecionandoDados(SELECT)....................................................................................................30 Sintaxebsica............................................................................................................................31 Condies..................................................................................................................................31 Filtrandodados.....................................................................................................................31 RelacionandoTabelas...........................................................................................................33 Ordenao(ORDERBY)..........................................................................................................34 Camposcalculados,concatenaoefunes............................................................................34 Agrupamento(GROUPeHAVING).........................................................................................34 AtualizandoDados(UPDATE)......................................................................................................34 ExcluindoDados(DELETE).........................................................................................................36 SQLDCLBsico(ManipulandoUsuriosePermisses)..................................................................38 TiposdePrivilgios.......................................................................................................................38 Permitindoacesso..........................................................................................................................38 Revogandoacesso..........................................................................................................................38 Exemplo01DEVA...........................................................................................................................39 DiagramadeClassesUML............................................................................................................39 CriaodasTabelasdoBancodeDados(DDL)...........................................................................40 InserodeDadosnastabelas.......................................................................................................43IntroduoEstecursoteveinspiraonanecessidadedarumabaseparameuscolegasdoCursode AdministraocomHabilitaoemAnlisedeSistemas,daFASBFaculdadeSoFranciscode Barreiras,emBarreiras/BA. TemosadisciplinadeAnlisedeProjetoseSistemaseadisciplinaLinguagemdeProgramao, masnenhumadisciplinaespecficadeBancodeDados.Ento,comoapoiodosprofessoresde ambasasdisciplinas,eutilizandocomobaseanlisesemUMLfeitasemsaladeaula,epara posteriordesenvolvimentoemDelphidobancocriado,elaboreiestepequenocursobsicodeSQL. OintuitoinicialutilizaroFIREBIRD(sucessorsoftwarelivredoINTERBASE)comobaseparao curso,comaintenodesergenricoosuficienteparaqueoconhecimentopossaserutilizadoem outrosbancos.Entretanto,numsegundomomento,eleterumaversoemMySQL,equemsabe meempolgoefaotambmpraPostgres... Emcomplementoaosconhecimentosadquiridos,utilizaremosanlisesfeitasemUMLemsalade aula,construindoasbasesdeexemploatravsdelas. Acreditoemretribuiroconhecimentoqueadquiricomtantossoftwaresedocumentaeslivres atravsdestapequenacolaborao.Tambmutilizareifontesexternas,principalmentepara informaeshistricas,poisnotemsentidoreinventararoda...OrganizaodoCursoIniciamenteaintenoeraterdoisnveis,bsicoeintermedirio.Maspercebiqueofocoseria melhorseabordasseapenasonvelbsicoeocursofossemultibanco.Porisso,aintenoter umcontedobsicocomumaexplicaodetalhada,facilitandooentendimentodosnovatos,e deixaraprofundamentosparaoutromomento.Istoincluicomandosdecriaoealteraodetabelas (DDL),manipulaoealteraodedados(DML)econtroledeusurioseacesso(DCL). Algunsrecursosnoseroabordados,asaber:domains,storedprocedures,triggers,exceptions, udfs,views,porseremtpicosavanadosemuitoespecficosdecadabanco.Triggerssero utilizadasapenasnobancoFirebirdparaalcanarresultadossemelhantesaodeoutrosbancosem autonumerao. OSQLutilizadoprocurarseromaisgenricopossvel,ouseja,nosedeternosrecursos especficosdecadabanco.Lembre,estenoumcursodeFirebird,MySQLouPostgres,masum cursodeSQL.Apenasseroidentificadasalgumaspeculiaridadesdecadabancoparautilizar recursosdeusocorriqueiro.AgradecimentosEmprimeirolugaragradeoaoProfessorFbioCallegari,quemuitoincentivouestetrabalho cedendosuasaulaseacompanhandomeutrabalho,etambmProfessorAlexandreMonge,que trabalhousuasaulasparaconstruodosexemplosqueseroconstrudosnestecurso. Eclaro,minhaturmaquemeaturou. RefernciasUtilizadas WikipediaAenciclopdialivre VriostrechossobreSQL,histriadosbancoseconceitosforamretiradosdaWikipedia.Emespecial: SQL UML BancosdeDadosRelacional SistemasdeGerenciamentodeBancodeDados Vriasapostilasforamconsultadas,eduasfontesbsicasforam:SQLMagazineClubDelphi Infelizmentemuitasdelasnopossuemrefernciaaautoria,possivelmenteporseremcpiasde outrosautoresdesrrespeitandoafonte.Nosocitadasaqui,masencontrandoalgumtrechoque conheaedequesaibaoautor,entreemcontatocomigoparaadevidareferncia. Agradeoespecialmentesapostilasdosseguintesautores: ApostiladeBancodeDadoseSQLProf.JorgeSurian&Prof.LuizNicochelli BancodeDadosProf.RenatoFileto ApostiladeFirebird1.0Autor:AndersonHaertelRodrigues&Colaborao:MarcusBoi Firebird1.5QuickStartGuide (emingls) PostgreSQLBR ManualdeRefernciadoMysql4.1 DiaEditordeDiagramas ParacriaodediagramasdeclassesUML Gimp Paraeditarasimagensutilizadas.Eclaro,adocumentaodosprpriosbancos,encontradaem: Ferramentasutilizadasparacriaodestecurso ConceitosGeraisdeSQLOqueSQLOtextodestetpicofoiextradodaWikipdia,aenciclopdialivre StructuredQueryLanguage,ouLinguagemdeConsultaEstruturadaouSQL,uma linguagemdepesquisadeclarativaparabancodedadosrelacional(basesdedadosrelacionais). MuitasdascaractersticasoriginaisdoSQLforaminspiradasnalgebrarelacional. SQLnormalmentepronunciadoemportuguscomoessequele,pormsuapronciacorreta deveriasesquel,doinglssequel,oualgumacoisaquesegueoutracoisa.SQLuma brincadeiracomonomedaprimeiralinguagemdeconsultaQUEL. EmboraoSQLtenhasidooriginalmentecriadopelaIBM,rapidamentesurgiramvriosdialectos desenvolvidosporoutrosprodutores.Essaexpansolevounecessidadedesercriadoeadaptado umpadroparaalinguagem.EstatarefafoirealizadapelaAmericanNationalStandardsInstitute (ANSI)em1986eISOem1987. OSQLfoirevistoem1992eaestaversofoidadoonomedeSQL92.Foirevistonovamenteem 1999e2003parasetornarSQL:1999(SQL3)eSQL:2003,respectivamente.OSQL:1999usa expressesregularesdeemparelhamento,queriesrecursivasegatilhos(triggers).Tambmfoifeita umaadiocontroversadetiposnoescaladosealgumascaractersticasdeorientaoaobjeto.O SQL:2003introduzcaractersticasrelacionadasaoXML,sequnciaspadronizadasecolunascom valoresdeautogeneralizao(inclusivecolunasidentidade). Talcomoditoanteriormente,oSQL,emborapadronizadopelaANSIeISO,possuimuitas variaeseextensesproduzidospelosdiferentesfabricantesdesistemasgerenciadoresdebasesde dados.Tipicamentealinguagempodesermigradadeplataformaparaplataformasemmudanas estruturaisprincipais. Outraaproximaopermitirparacdigodeidiomaprocessualserembutidoeinteragircomo bancodedados.Porexemplo,oOracleeoutrosincluemJavanabasededados,enquantoo PostgreSQLpermitequefunessejamescritasemPerl,Tcl,ouC,entreoutraslinguagens.SGDBSistemadeGerenciamentodeBancodeDadosDeumaformabeeeemsimplificada,SGDBumsoftwareresponsvelpelogerenciamento (armazenamentoerecuperao)dosdadosnoBancodeDados.Mas...existemuitadiscussosobre oquepodeserconsideradoSGDBousimplesmenteumGAGerenciadordeArquivos. Nodoescopodestecursoentrarnestasdiscusses.Vocpodeencontrarmaisdetalhamento tericoevisessobreesteassuntonestasduasreferncias: ApostiladeBancodeDadoseSQLProf.JorgeSurian&Prof.LuizNicochelli BancodeDadosProf.RenatoFileto Oqueseriainteressanteconsiderarqueadependerarefernciaedoautor,oMSAccesspodeou noserconsideradoumSGDB,assimcomooMySQL,poisnenhumdosdoispossuitodasas caractersticasbsicasdeumSGDB.Mas...oMySQL,emsuaverso5.0ospossui,eemverso anteriorespossuavriasdestascaractersticasatravsdemotoresadicionaiscomooINNODB.Jo MSAccess,quemuitosautorescolocamcomoSGDB,nopossuiumservidordedicado,sendoseus arquivosmanipuladosdiretamentepelosclientesatravsdabibliotecaJET...Ouseja,muitadiscusso. IMHOEmminhahumildeopinioapesardepossuirmuitosrecursosinteressantes,oMSAccess nopodesercomparadoaoMySQL,mastambmnopodesercomparadoaoDbase...Eentendo tambmquehojeofocoestmuitomaisnaampladisseminaodoMySQLeseufocoem desempenho,oqueincomodabancosmaiscompletosOracle,Interbase/Firebird,Postgres,DB2, Ingress,Progress,queperdemmercadoparaumconcorrenteincompleto. fatoqueoPostgreseoFirebird,apenascitandoopeslivres,somaiscompletosecomplexos queoMySQL,eatporistomenospopularesentreprogramadoresnovos.Mastmsuafora.BancosdeDadosRelacionaisExistemvriosmodelosdebancosdedadostaisquais: ModeloOrientadoaoRegistroModeloRelacional,ModeloHierrquicoeModeloem Rede; ModeloSemntico:ModeloEntidadeRelacionamentoeoFuncional; ModeloOrientadoaoObjeto:ModelosO2eodeRepresentaodeObjetos.(Obs.:vejaemRefernciasUtilizadasmaioresaprofundamentossobreaquestoterica). OFIREBIRD,MySQLePOSTGRESutilizamoModeloRelacional,queomodelomais largamenteutilizadopelosSGBDs.Algunsconceitosdestemodelosoimportantesparaa continuidadedenossosestudos: (OtrechoaseguirfoiadaptadodaWikipedia) Tabelas Todososdadosdeumbancodedadosrelacional(BDR)soarmazenadosemtabelas.Umatabela umasimplesestruturadelinhasecolunas.Cadalinhacontmummesmoconjuntodecolunasmas aslinhasnoseguemqualquertipodeordem.Emumbanco/basededadospodemexistirumaou centenasdetabelas.Olimitadorimpostoexclusivamentepelaferramentadesoftwareutilizada. CPF Nome Registro1 152.487.26542 JoodaSilva Registro2 687.481.68288 MariaJoaquina Registro3 001.645.852.12 AgnaldoSouzaRegistros(outupla) Cadalinha,formadaporumalistaordenadadecolunas,representaumregistro(outupla).Os registrosnoprecisamnecessariamenteconterdadosemtodasascolunas,osseusvalorespodem sernulos. Formalmentefalando,umatuplaumalistaordenadadevalores,ondecadavalordodomnio especificadopeloatributodefinidonoesquemaderelao. Colunas(AtributosouCampos) Ascolunasdeumatabela,sotambmchamadasdeAtributosouCampos.Cadaatributo/campo pertenceaumdomnio(tipodecampo),quedefineosvaloresquepodemserassociadosaqueleatributo. Domnio(TiposdeDados) OsDominiospossuemcaractersticasquedefinemospossveisvaloresqueseroarmazenadoem umatributodeumatupla.Porexemplo.Emumcampodotiponumrico,serosomente armazenadosnmeros.Ossistemasdebancodedadospossuemregrasparaconsistirosdadosque soarmazenados. Chave Astabelasrelacionamseumasasoutrasatravsdechaves.Umachaveumconjuntodeumou maiscamposquedeterminamaunicidadedecadaregistro. Porexemplo,seumbanco(base)dedadostemcomochaveCdigodoProduto+IDSistema, semprequeacontecerumainserodedados,osistemadegerenciamentodebanco(base)dedados irfazerumaconsultaparaidentificarseoregistronoseencontragravadonatabela.Casoexista umnovoregistronosercriado,sendoqueapenasaalteraodoregistroexistenteserpossvel.A unicidadedosregistros,determinadaporsuachave,tambmfundamentalparaacriaodos ndices. Temosdoistiposdechaves:ChavePrimria:(PKPrimaryKey)achavequeidentificacadaregistrodandolhe unicidade.Achaveprimrianuncaserepetir.Amaioriadosbancostambmexigequeela sejaNONULA(NOTNULL)almdenica. ChaveEstrangeira:(FKForeignKey)umachaveformadapelachaveprimriadeoutra tabelaeachavedeumcampodatabelaquerecebeorelacionamento.Defineum relacionamentoentreastabelasepodeocorrerrepetidasvezes.Observao:GeralmenteChavesPrimriassodeapenasumcampo,maspodemsercompostas,ou seja,vrioscamposfazempartedela.Istodeterminaqueacombinaoentreoscamposque precisasernica,enooscamposqueisoladamenteacompe. ndices Olimitadorimpostoexclusivamentepelaferramentadesoftwareutilizada.Sendoassim,paraa recuperaodosdadosnecessrioaexistnciademecanismosquefacilitemaconsulta, proporcionandoumaperfomanceaceitvelparaamesma.Paraisso,ossistemasdebancosdedados relacionaiscriamndicesdastabelas,sendoqueessesndicessoatualizadosconstantemente. Casoondicesecorrompaporalgummotivo,possvelquepesquisaspossamretornarresultados nodesejadosouqueinseresdechavesduplicadasaconteam.Nessecasoobancodedadosser corrompidotambm.Ossistemasdebancos(bases)dedadospossuemmecanismosdeevitarque esseseventosocorramcomotambmpossibilitamarecuperaodosndiceseconsistnciadatabela casoelesocorram. Relacionamentos Comooprprionomesugere,um(a)BDRpossuidiversosrelacionamentosentreastabelas existentes. UmrelacionamentofeitoligandoseumcampodeumatabelaXcomumcampodeumatabelaY outabelaestrangeira.Porexemplo,sepedidos(emumatabela)estorelacionadosaumcliente(emoutratabela),oSGBDpoderbloqueararemoodesteclienteenquantoelepossuirpedidos registrados.(Observao:nocasodechavesprimriascompostas,arelaosedarentretodosos camposdestachave) Existemalgunstiposderelacionamentospossveis: Umparaum(1para1) Umparamuitos(1paraN) Muitosparamuitos(NparaN),quenopodeserimplementadodiretamentenomodelo relacionaletemqueserconstrudocomumatabelaauxiliar.ALinguagemSQLTiposdePalavrasChave(OtrechoaseguirfoiadaptadodaWikipedia) AlgunsgruposdecomandosdoSQLsodefinidospelasfunesexercidasnobancodeDados. Existemalgumassubdenominaes,masomaiscomumdefiniremdoisgrandesgrupos: DDL(DataDefinitionLanguage)LinguagemdeDefiniodeDados Permiteacriaoealteraodeobjetosdobancodedados.ApesardebaseadonaSQLpadro, geralmenteexistemextensesparacadaSGDButilizado.Oscomandosclssicosso: CREATEcriaumobjeto(umatabela,porexemplo)dentrodobancodedados(ouo prprio); DROPapagaumobjetodobancodedados; ALTERalteraumobjetodobancodedados.DML(DataManipulationLanguage)LinguagemdeManipulaodeDados Permiteaalteraodosdadosdentrodastabelas.Osmaiscomunsso: SELECT(SELECIONAR)paraseleodedadosemumoumaisregistros INSERT(INSERIR)parainclusoumregistro UPDATE(ATUALIZAR)paramodificaovaloresdeumregistro DELETE(EXCLUIR)paraexclusodeumregistro TRUNCATE(TRUNCAR)excluitodosregistrosdatabelaAlgunscomandossoutilizadosparamanipularaTRANSAO.Transaoumconceitomuito importanteemSGDBs,poispermitedemarcarumblocodecomandosqueserexecutadoouno, massempreemconjunto.Seumcomandofalhar,todooconjuntodecomandosfalha,ouento possveltestarisoladamentealteraesesefetivarnobancodedadosasalteraesquandose consideraseguro.Oscomandosutilizadosnestarealidadeso: BEGINTRANSACTION(ouSTARTTRANSACTION,ouBEGINWORK,ouBEGIN TRANS,dependendododialetoSQL)podeserusadoparamarcarocomeodeuma transaodebancodedadosquepodesercompletadaouno(geralementeutilizadoum ENDparafinalizaratransao). COMMITenviatodososdadosdasmudanaspermanentemente. ROLLBACKfazcomqueasmudanasnosdadosexistentesdesdequeoltimoCOMMIT ouROLLBACKsejamdescartadas.COMMITeROLLBACKinteragemcomreasdecontrolecomotransaoelocao.Ambos terminamqualquertransaoabertaeliberamqualquercadeadoligadoadados.AlgunsbancospodemtrabalharcomAUTOCOMMIT,ouseja,confirmamqualquercomandoapssuaexecuo. Istopodesertil,masretiraumacamadadeseguranaimportanteemaplicaesimportantes. Observao:algumasrefernciasutilizamotermoDQL(DataQueryLanguage)Linguagemde ConsultadeDadosparaocomandoSELECT,exclusivamente. DCL(DataControlLanguage)LinguagemdeControledeDados DCLcontrolaosaspectosdeautorizaodedadoselicenasdeusuriosparacontrolarquemtem acessoparaveroumanipulardadosdentrodobancodedados. DuaspalavraschavesdaDCL: GRANTautorizaaousurioexecutarousetaroperaes. REVOKEremoveourestringeacapacidadedeumusuriodeexecutaroperaes.SQLemFIREBIRDIntroduoHistriadoFIREBIRDOtextodestetpicofoiextradodaWikipdia,aenciclopdialivre Firebird(algumasvezeschamadodeFirebirdSQL)umsistemademanutenodebasesdedados. CorreemLinux,WindowseumavariedadedeplataformasUnix.AFundaoFirebirdSQLfaza manutenoedesenvolvimentodoFirebird. BaseadonocdigodoInterBasedaBorland,quandodaaberturadeseucodigonaverso6.0(em25 deJulhode2000),algunsprogramadoresemassociao,assumiramoprojetodeidentificare corrigirinumerosbugsdaversooriginal,surgindoaioFirebird,quesetornouumbancocom caracteristicasprprias,obtendoumaaceitaoimediatanocrculodeprogramadores,aprimeira verso1.0.Quasequetotalmenteaindacompativelcomsuaorigem,estandoatualmenteemsua verso1.5,commuitasnovidades...Averso2.0emfasedeproduoainda,devertrazermuitas inovaes,jestsefalandoatemumaverso3.0quehojetemocodinomeVulcan,cujas caracteristicasjentoseriadeumsuperbancodedados,seumaiordiferencialaindasebaseiana gratuidade,obancofreeemtodosossentidos...nohlimitaesdeuso,eseusuporte amplamentediscutidoemlistasnainternet,oquefacilitaenormementeaobtenodeajudatcnica.ObtendoeInstalandoFIREBIRDeFerramentasNadatadeconfecodestematerial(maio/2006),altimaversoestveldoFirebirdera1.5.3.Voc semprepoderobteraltimaversonolinkaqui.AversoutilizadanestecursoaSuperServer paraWindows. DownloaddoFirebird1.5.3 ComoferramentadeadministraofoiescolhidooIBOConsole,queumaversoatualizadapara FirebirddoIBConsole,acompanhantedasantigasversesdoInterbase.Emboranosejaomais poderoso,livreeestvel.Vocencontraaltimaversoaqui. DownloaddoIBOConsole1.1.12 Agoravamospassoapassoinstalarcadaumdeles:IBOConsolecomandosbsicosParautilizaroIBOConsole,precisoconhecersuainterfaceeaprenderalgumasoperaesbsicas. Vamosl. RegistrandoumServidor Oprimeiropassoregistrarumservidor.Entendeseporumservidorumcomputadorquehospeda umoumaisbancosdedadosdoFirebird.Pararegistrlo,necessriosaberseuendereoIPou nomederede(comexcessodoservidornamquinaondeoIBOConsoleestinstalado,conhecido comolocal. UtilizeomenuServidorRegistrar... oucliquecomobotodireitoemServersenaopoRegistrar... RegistrandoumServidorLocal(localhost) Atelasugereinicialmenteoregistrodoservidorresidentenaprpriamquina,referenciadocomo LocalServer.OsuperusuriodoFIREBIRD(todopoderosoadministradordoservidor)o SYSBDA,comasenhapadromasterkey. Usurio:SYSBDA Senha:masterkey RegistrandoumServidorRemoto Atelaamesma,bastaoptarporRemoteServerepreencheroscampos: NomedoServidor:EndereoIPouFQDN(NomequalificadodeDomnio,tipo www.algo.com.br) ProtocolodeRede:normalmenteTCP/IP NomedoAlias:AliasumapelidoparareferenciaroservidornoIBOConsole Descrio:Opcional UsurioeSenha:conformeseuacessoaoservidor Criando/RegistrandoumBancodeDadosnoServidorApsoregistro,oIBOConsoleapresentaaseguintetela: Senoservidorexistenoexistenenhumbancodedados,devemoscriaroqueutilizaremos. Entretanto,podemosquererutilizarumbancojexistente,ouseja,vamosregistrarumbanco. UtilizeomenuBancodeDadosRegistrar... ouBancodeDadosCriarBancodeDados... ou clicandocomobotodireitoemBancodeDadosnajaneladireita,dentrodoservidordesejado. CriandoumBancodeDadosnoServidor OptandoporCriarBancodeDados...,atelaaseguirsurge: PodeparecerestranhooFIREBIRDsolicitarvriosFilenames(Nomesdearquivos),maso FIREBIRDpodedividirobancoemvriosarquivosparaotimizarodesempenho(especialmenteem bancosmuitograndes).Noonossocaso.Osarquivospodemestarlocalizadosemqualquerlocal, comqualquernome.Entretanto,umpadroutilizaraextensofdbparaarquivosdoFIREBIRD.O Interbaseutilizaaextensogdb,entovocpodesehabituaraencontrarasduasformas. Noexemplo,utilizouse: Filenames:C:\banco\deva.fdbDiretrioearquivoondeserarmazenado Alias:DevaApelidoparanossobancoObservao:AcriaodobancotambmpodeserrealizadaatravsdecomandosSQL,oqueser vistomaisadiante. RegistrandoumBancodeDadosnoServidor OptandoporRegistrar...,atelaaseguirsurge: File:C:\banco\deva.fdb Alias:Deva UserName:[Usurioparaacesso] Password:[Senhadousurio]TeladeAcessoaoBancoApsacriaoouregistrodoBanco,todososobjetoseaesestarodisponveis. Selecionandoobanconajaneladaesquerdatemosvriasopesdeconsultasdeoperaesde manutenonajaneladadireita.Nonossofoconosdetermosnestasoperaesdemanuteno.ManutenodeUsuriosOIBOConsolepermitesuacriaodeusurioseadefiniodepermissesanveldeobjeto. TambmpossvelrealizarestasoperaesatravsdecomandosSQL. ClicandoemUsuriosnalistaesquerda(osusuriossomanipuladosparacadaservidor)teremos direitaalistadosusuriosdesteservidor.Clicandocomobotodireitonajanelavaziapodemos criarumnovousurio,ouclicandoemcimadeumexistentepodemosalterloouexclulo Ateladecriaoautoexplicativa;apenasoscamposPrimeiroNome,Nomedomeioe Sobrenomesoopcionais Ateladealteraoigualadecriao,sendoutilizadaprincipalmenteparaalterarasenha.ManutenodeTabelasClicandoemTabelasdeumbanco,najanelaesquerda,teremosalistadetabelasdobanco. Clicandocomobotodireitosobreatabelapodemosversuaspropriedades. Aprimeiratelamostraadefiniodecamposdatabela.Clicandocomobotodireitosobreeles possvelincluirnovoscampos,alterlosouexclulos. Outrosdetalhessobreatabela,comondices,constraints,etc,podemserconsultados. AguiaDadospermitealterarosregistrosdatabela.Vriosrecursosestodisponveis,equem utilizaoAccessvaipercebercertasemelhananaedio. Aguiametadadosmostraoscomandosdecriaodatabela.Bastantetilpararecriaratabela.A opoExtrairdadosdaTabelaagregaumcomandoINSERTparacadaregistrodatabela,ouseja, fazumdumpdosdados. Aguiapermissesexibeaspermissesdosusuriosparaatabela.Clicandocomobotodireito sobreousuriopossvelalteraraspermisses. AguiaDependnciaexibeasrelaesdedependnciadatabelacomoutrastantosasque dependemdelequantodasquaiseledepende. AguiaDescrioexibeumcomentrioopcionalquepodeseranexadotabela(tilparafinsde documentao). Porfimaltimaguia,SQLStataments,dasintaxedeSELECT,INSERT,UPDATEeDELETE paraatabela.Muitoprticoparatabelasextensas.ExecutandocomandosSQLOIBOConsolepossuiumatelaparaexecuodecomandosSQL.possvelacessladeduas formas: Menu FerramentasSQLInterativo Botonabarradeferramentas Paraexecutarcomandosemdeterminadobanco,necessrioqueeleestejaselecionadoantesde acessaroSQLInterativo. VejamososbotesmaisimportantesdabarradeferramentasnoSQLInterativo: Navegarentreassetenasexecutados ExecutarsentenaSQL SalvarouabrirscriptsSQL Commitconfirmarexecuodassetenas Rollbackcancelarexecuodassetenas Ateladividaemquatroreas: Listadetabelas Listadecamposdatabelaselecionada RegiodeConsultas(GuiaSQLpadroeQueryBuilder) Regioderetorno(dados,informaeseerrosdasconsultas)AsentenaSQLdeveserdigitadanaguiacorrespondente,eapsseexecutaobotoExecutar sentenaSQL. Quandoumasentenacontivererrosdesintaxeoudeintegridadereferencial,asmensagenssero retornadasnatelaabaixo: JquandohouverresultadopositivoparaumSELECT,osdadostambmseroexibidosabaixo: UmafuncionalidadequealgunsgostamoQueryBuilder(ConstrutordeConsultas,uma interfacevisualparaconstruodeconsultas.ElaDragAndDrop(SegureeArraste):arrasteas tabelasparaareadesenho,arrasteoscamposparateladebaixoparaselecionlosarrasteos camposdeumatabelaparaoutrapararelacionlas.Useobotodireitoparaconheceroutras funcionalidadesdestaferramenta. Apsexecutaraconsulta,cliquenaguiaSQLparaverasentenaemformatoSQL. Importante:aoexecutarconsultasquealteramdados(INSERT,UPDATE,DELETE)estasssero efetivadasapsousodobotoCommit.SQLBsicoTodososcomandosaseguirdevemserexecutadosapartirdeumcliente.OFirebirdpossuium clienteemmodotexto,oISQL,quepodeseracessadonainstalaodetalhadanestecursoapartir doMenuIniciarProgramasFirebird_1_5FirebirdISQLTool oudiretamenteatravsdo executvelemC:\Arquivosdeprogramas\Firebird\Firebird_1_5\bin\isql.exe. Evidentemente,maisprticoutilizarumainterfacegrficaparaexecutaroscomandos.Emnosso curso,utilizaremosoIBOConsole. UmarefernciatodososcomandodalinguagemencontradaemApostilaFirebird1.0.As sintaxesapresentadasnestecursososimplificadaseobjetivas,omitindorecursosavanadosno utiizadosnosexemplos.AlgunspadresdesintaxeOscomandoSQLprecisamterminarempontoevrgula(;).Emalgumassituaescomoquando executadosisoladamenteounateladecomandosSQLdoIBOConsolepossvelignoraropontoe vrgula.Porm,emscriptsounoISQListoimprescindvel.Paraacriaodohbito,todososcomandosaquiapresentadosteroaterminaopadro. Strings(textos)devemestarenvolvidosemaspassimples/apstrofo().Casosejanecessrio colocaraspassimples/apstrofonotexto,utilizaseduasvezes.Exemplo:'Istoumtextovlido' 'Caixad''gua' 'Ops...Caixad'guacomerrodesintaxe' Comentrios(textoquenoserexecutado)noSQLcriadocolocandoentre/*e*/./*Istoumcomentrio*/SQLDDLBsico(ManipulandoObjetosdoBD)CriandoumBancodeDados(CREATEDATABASE)UtilizandooIBOConsoleestaoperaojfoiexplicadaemseupequenotutorial,quevocpode acessaraqui.Paracriarnamogrande,ouparautilizaoemumscriptdecriaodebanco, utilizamosasintaxeaseguirdocomandoCREATEDATABASE(asintaxesimplificada):CREATEDATABASE"CAMINHO\NOME_DO_BANCO.FDB";Porexemplo,criandoobancodedadosdoDEVAnodiretrioC:\BANCO:CREATEDATABASE"C:\BANCO\DEVA.FDB";SequiserutilizarobancoatravsdoIBOConsole,nodeixederegistrlo(lembreaquicomofaz lo.ConectandoaumBancodeDados(CONNECT)AoclicarduasvezesnumBancodeDadosnoIBOConsole,internamenteestaramosconectandoao bancodedadoscomocomandoCONNECT:CONNECT"CAMINHO\NOME_DO_BANCO.FDB"USER"USUARIO"PASSWORD"SENHA";Porexemplo,criandoobancodedadosdoDEVAnodiretrioC:\BANCO:CONNECT"C:\BANCO\DEVA.FDB"USER"SYSDBA"PASSWORD"masterkey";Importante:ousurionocasesensitive,masasenha.Embomportugus,nofazdiferenase vocdigitaousurioemmaisculasouminsculas,masasenhaprecisaserdigitadacomofoi criada. UsurioSYSDBAousysdbanofazdiferena,mas; SenhamasterkeyouMASTERKEYfazmuitadiferenaOcomandoCONNECTtemmaissentidonumscriptouutilizandooISQLemmodotexto,mas importanteconhecloexatamenteparaeditarscriptsqueexecutamcomandosemlote.CriandoTabelas(CREATETABLE)Antesdecriartabelas,precisoconhecerosTiposdeCampos(ouDomnios)disponveisnoFIREBIRD. Observao:umaexplicaodetalhadasobreesteassuntoencontradonaApostilaFirebird1.0. TiposdeDados(DomniosPadro)doFIREBIRD CHAR(n)String(texto)detamanhofixon.Limite32767,32k.Usadoquandootexto armazenadosempredomesmotamanho,comoemUF,CPF,CEP VARCHAR(n)String(texto)detamanhovarivelatomximoden.Limite32767,32k. Usadoquandonosesabeotamanhoexatodotextoaserarmazenado,masapenasseu tamanhomximo,comoemNome,Endereo,etc. DATEData(oformatoarmazenadoaaaammdd,ou20001231para31dedezembrode 2000) TIMEHora TIMESTAMPDataeHoraSimultaneamente DECIMAL(n,d)ouNUMERIC(n,d)nmeroscomprecisodecimal(nantesdavrgula, dcasasdecimais) SMALLINTDadosnumricosinteirospequenos,nafaixade32768a32767. INTEGERDadosnumricosinteirosgrandes(32bits),nafaixade2.147.483.648at FLOATDadosnumricoscomprecisosimplesde7dgitos(casasdecimais). DOUBLEPRECISIONDadosnumricosqueexigemgrandepreciso(casasdecimais). 64bits. BLOBEstetipodecampootipoindicadoparaarmazenarTextosGrandesMemos, Fotos,Grficos,cones,isto,aparentementenotemumtipodedadoquenopossaser armazenadonoCampoBlob.CamposBlobsnopodemserindexados.Limite:64k. Subtipos: SUB_TYPE0Formatosbinrios:fotos,sons,etc; SUB_TYPE1Textos2.147.483.648 SintaxeCREATETABLE(CriarTabela) Acriaodeumatabelasimplessegueasintaxeabaixo:CREATETABLENOMETABELA( NOMECAMPO1TIPO, NOMECAMPO2TIPO, NOMECAMPO3TIPO, NOMECAMPO4TIPO );Percebaquealistadoscamposestenvolvidaemparenteses,equeapscadacampohuma vrgula(,),eapsoltimocamponoh.Umexemplo:CREATETABLECLIENTE( CODIGOINTEGER, NOMEVARCHAR(40), TIPOINTEGER, ENDERECOVARCHAR(70), CIDADEVARCHAR(40), UFCHAR(2), OBSERVACAOBLOBSUB_TYPE1, DATANASCIMENTODATE, DATACADASTRODATE);Opescomunsparacamposnacriaodetabelas Almdadefiniodotipo,algumasopessocomumenteutilizadasnacriaodecamposnas tabelas.Vejamososmaiscomuns:NOTNULL:NONULOUtilizadoparaforarqueocamposejasemprepreenchidocom umvalor,nosendopermitidosvaloresnulos.SEMPREnecessrioquandoaocampo chaveprimria. DEFAULT:ValorPadroUtilizadoparainformarumvalorpadroparaocampo.Podeser utilizadaumafuno,comservistomaistarde,paradeterminarovalorCREATETABLECLIENTE( CODIGOINTEGERNOTNULL, TIPOINTEGERNOTNULL, NOMEVARCHAR(40)NOTNULL, ENDERECOVARCHAR(70), CIDADEVARCHAR(40), UFCHAR(2)DEFAULT'BA', OBSERVACAOBLOBSUB_TYPE1, DATANASCIMENTODATE, DATACADASTRODATE );Criandochavesprimrias(PKPrimaryKey) Acriaodechavesprimriasfeitalogoapsalistadecampos.Asintaxe:PRIMARYKEY(campo) PRIMARYKEY(campo1,campo2)>parachavescompostas );Exemplo:CREATETABLECLIENTE( CODIGOINTEGERNOTNULL, NOMEVARCHAR(40)NOTNULL, TIPOINTEGERNOTNULL, ENDERECOVARCHAR(70), CIDADEVARCHAR(40), UFCHAR(2)DEFAULT'BA', OBSERVACAOBLOBSUB_TYPE1, DATANASCIMENTODATE, DATACADASTRODATE, PRIMARYKEY(CODIGO) );Criandochavesestrangeiras(FKForeingKey) Acriaodechavesprimriasfeitalogotambmapsalistadecampos.Asintaxe:/*Sintaxebsica*/ FOREIGNKEY(campo)REFERENCEStabela_estrangeia(campo_tabela_estrangeira) /*SintaxeExtendida*/ FOREIGNKEY(campo)REFERENCEStabela_estrangeia(campo_tabela_estrangeira)ON UPDATE{action}ONDELETE{action} );Nasintaxeextendida,defineseoqueacontecercomoregistrodestatabelaseaconteceraatualizaodachaveestrangeira(ONUPDATE)ounaexclusodoregistrocorrespondentenatabela estrangeira(ONDELETE).Vejamososresultados:NOACTION(Semao)Nofaznada,apenasimpedeaao(restriodealteraoou exclusodachavenatabelaestrangeira); CASCADE(cascatear)Nocasodeatualizaodachavenatabelaestrangeira,atualiza nestatabela;nocasodeexclusodoregistronatabelaestrangeira,EXCLUITODOSOS REGISTROSRELACIONADOSNESTATABELA(notequepodesertilouperigoso...); SETDEFAULT(definepadro)Defineparaumvalorpadroaquiinformadoemcasode alteraoouexclusodachavenatabelaestrangeira; SETNULL(defineparanulo)Defineparanuloemcasodealteraoouexclusodachave natabelaestrangeira.Spossvelcriarumachaveestrangeirasejhouversidocriadaatabelaestrangeira.CREATETABLETIPOCLIENTE( CODIGOTIPOINTEGERNOTNULL, DESCRICAOVARCHAR(20), PRIMARYKEY(CODIGOTIPO) ); CREATETABLECLIENTE( CODIGOCLIENTEINTEGERNOTNULL, NOMEVARCHAR(40)NOTNULL, TIPOINTEGERNOTNULL, ENDERECOVARCHAR(70), CIDADEVARCHAR(40), UFCHAR(2)DEFAULT'BA', OBSERVACAOBLOBSUB_TYPE1, DATANASCIMENTODATE, DATACADASTRODATE, PRIMARYKEY(CODIGOCLIENTE), FOREIGNKEY(TIPO)REFERENCESTIPOCLIENTE(CODIGOTIPO) );ChavesPrimriasAutonumeradas AlgunsbancoscomooMSAccessouoMySQLpossuemparmetrossimplesparacriarcampos autonumerados,muitoteisparachavesprimrias.MasnoFIREBIRDotrabalhomaior. UmdosobjetosexistentenoFIREBIRDoGENERATOR(algocomoGerador),quenadamais queumacumuladordeumnmerointeiro.Umatcnicasimplesparacriarumcampo autonumeradoutilizaroobjetoTRIGGER(Gatilho),queexecutaumaaovinculadaaum eventonatabela. Otruqueoseguinte:CREATEGENERATOR{TABELA}_GEN; SETTERM^; CREATETRIGGER"TRIG_{TABELA}_GEN"FOR"CLIENTE" ACTIVEBEFOREINSERTPOSITION0 AS begin IF(new.{CAMPOCHAVE}ISNULL)then begin new.{CAMPOCHAVE}=gen_id({TABELA}_GEN,1); end end ^ COMMITWORK^ SETTERM;^Sendo: {TABELA}=Tabelaacriaraautonumerao {CAMPOCHAVE}=ChavePrimriadaTabelaExemploparatabelaclientequeestamoscriando:CREATEGENERATORCLIENTE_GEN; SETTERM^; CREATETRIGGER"TRIG_CLIENTE_ID"FOR"CLIENTE" ACTIVEBEFOREINSERTPOSITION0 AS begin IF(new.CODIGOCLIENTEISNULL)then begin new.CODIGOCLIENTE=gen_id(CLIENTE_GEN,1); end end ^ COMMITWORK^ SETTERM;^AlterandoTABELAS(ALTERTABLE)OcomandoALTERTABLEutilizadoeconjuntocomasintaxedecriao:/*Incluindoumcampo*/ ALTERTABLENOMETABELAADDNOVOCAMPO5TIPO; /*Excluindoumcampo*/ ALTERTABLENOMETABELADROPNOVOCAMPO5; /*Incluindoeexcluindoaomesmotempo ALTERTABLENOMETABELADROPNOVOCAMPO5,*/ ADDNOVOCAMPO6TIPO; /*Alterandoonomedeumcampo*/ ALTERTABLENOMETABELAALTERCAMPO5TOCAMPO6; /*Adicionandoumachaveprimria*/ ALTERTABLENOMETABELAALTERPRIMARYKEY(CAMPO1); /*Adicionandoumachaveestrangeira*/ ALTERTABLENOMETABELAALTERFOREIGNKEY(CAMPO1)REFERENCESTABELAESTRANGEIRA (CAMPOCHAVE);Algunsexemplos:/*Incluindoumcampo*/ ALTERTABLECLIENTEADDEMAILVARCHAR(30)NOTNULL; /*Excluindoumcampo*/ ALTERTABLECLIENTEDROPLOGRADOURO; /*Incluindoeexcluindoaomesmotempo*/ ALTERTABLECLIENTEADDEMAILVARCHAR(30)NOTNULL,DROPLOGRADOURO; /*Alterandoonomedeumcampo*/ ALTERTABLECLIENTEALTERLOGRADOUROTOENDERECO; /*Adicionandoumachaveprimria*/ ALTERTABLECLIENTEALTERPRIMARYKEY(CODIGO); /*Adicionandoumachaveestrangeira*/ALTERTABLECLIENTEALTERFOREIGNKEY(CODTIPOCLIENTE)REFERENCESTIPOCLIENTE (CODTIPOCLIENTE);ExcluindoTABELAS,BANCOSeoutrosobjetosOcomandodeexclusooDROP.Elepodeserexecutadoparavriosobjetos:/*Excluindoumatabela*/ DROPTABLEnome_da_tabela; /*Excluindoumgenerator*/ DROPGENERATORnome_da_tabela; /*ExcluindoumaTRIGGER*/ DROPTRIGGERnome_trigger /*Excluindoumbanco*/ DROPDATABASE"CAMINHO\NOME_DO_BANCO.FDB"; Exclusoalgoradical,emespecialdebancosinteiros.Deveserrealizadacomcuidado.Apsa confirmaodatransao(COMMIT),nohavervolta,anoserporbackup.SQLDMLBsico(ManipulandoDados)InserindoDados(INSERT)ParainserirdadosemumatabelautilizamosocomandoINSERT.AsintaxedocomandoINSERT utilizatrsblocos:/*Definindotabela*/ INSERTINTOTABELA /*Listadecamposseparadosporvrgulasenoforinformada,serotodosos campos*/ (CAMPO1,CAMPO2,CAMPO3,CAMPO4) /*Listadevaloresasereminseridos,separadosporvrgula*/ VALUES('valor1',2,'20061231',NULL);Textosdevemestarentreapstrofos().Asdatasnoformatoaaaammdd,tambmentre apstrofos. ValoresNULLOscamposnoinformadosreceberoovalornulo(NULL).Seocampofoicriado comaopoNOTNULL,istoacarretarumerro.Sepossuiraopovalorpadro(DEFAULT), aoinvsdeNULLarmazenarovalorDEFAULTespecificado.Ainda,seocampopossuiruma TRIGGERdeinserovinculada,poderterumvalorautomaticamentecalculado.Nosexemplos queutilizamosdecriaodetabela,utilizamosumGENERATORemconjuntocomuma TRIGGERquecriaumcampoautonumerado,semprequeovalorinseridosejaNULL.Campos definidoscomoPRIMARYKEY,porseremobrigatoriamenteNOTNULL,evidentementeteroo mesmotratamento. Vejamosumexemploconsiderandoatabelaabaixo:CREATETABLEALUNO( MATRICULACHAR(9)NOTNULL, NOMEVARCHAR(50),DATANASCDATE, DISCIPLINASINTEGER );Ocdigoparainserirumregistropodeseralgumdosabaixo,conformealimitaodenoinserir valoresnulosparaocampoMATRICULA:/*Todososcampos,semespecificar*/ INSERTINTOALUNO VALUES('200304521','MARIADASILVA','19780905',3); /*Todososcampos,especificados*/ INSERTINTOALUNO(MATRICULA,NOME,DATANASC,DISCIPLINAS) VALUES('200412453','JOODASILVA','19801004',5); /*Omitindoadatadenascimento*/ INSERTINTOALUNO(MATRICULA,NOME,DISCIPLINAS) VALUES('200103345','SHEILADASILVA',2); /*Asinseresaseguirgeramerros*/ INSERTINTOALUNO VALUES('200301248','FBIODASILVA','19760818'); /* Countofreadwritecolumnsdoesnotequalcountofvalues (Contagemdecolunasnoigualcontagemdevalores) Existemmenoscamposouvaloresqueonecessrio */ INSERTINTOALUNO VALUES('200501354','MAGDADASILVA','19761318',4); /* conversionerrorfromstring"19761318" (errodeconversodastring"19761318") Dataesterrada,nopodeserconvertidadetextoemdata(ms13noexiste!) */ INSERTINTOALUNO VALUES('200501354','JOAQUIMJOSDASILVAXAVIERFILHOSOBRINHONETOPARENTE DISTANTE','19761218',4); /* arithmeticexception,numericoverflow,orstringtruncation (excessoaritmtica,sobrecarganumricaoutruncamentodestring) Algumvalorextrapolouolimitedearmazenamentonocaso,umnomecommaisde 50caracteres */Quandoseviolaumachaveprimriainformadaemduplicidadeouchaveestrangeirainserindo umvalorquenoencontradonatabelaestrangeiratambmserecebemensagensdeerro: violationofPRIMARYorUNIQUEKEYconstraintINTEG_183ontableTIPOCLIENTE (violaoderestriodeCHAVEPRIMRIAouNICAINTEG_183natabela TIPOCLIENTE) violationofFOREIGNKEYconstraintINTEG_187ontableCLIENTE (violaoderestriodeCHAVEESTRANGEIRAINTEG_187natabelaCLIENTE)SelecionandoDados(SELECT)SeleoaoperaomaisutilizadaemSQL.Veremosaseguirsuassintaxesmaisbsicas,criando gradativamenteseleesmaiscomplexas.OcomandochaveoSELECT.Sintaxebsica/*Selecionar*/ SELECT /*Listadecamposseparadosporvrgula*/ CAMPO1,CAMPO2,CAMPO3 /*Databela*/ FROMTABELA;Paraselecionartodososcampos,utilizeoasterisco*. Aconsultaabaixoselecionatodosregistros:SELECT*FROMTABELA;possveltambminformaronomedoscamposdeformacompleta,especificandoo TABELA.CAMPO.Istopodeparecerredundante,mascomajunodevriastabelas necessrioevitaraambiqidade,ouseja,fazerrefernciaacamposquepossuemomesmonomeem duastabelasdeformaclaraeespecfica.SELECTTABELA.CAMPO1,TABELA.CAMPO2,TABELA.CAMPO3FROMTABELA;possvel,parafacilitar,criaralias(apelidos)paratabelasecampos,facilitandosuareferncia. Tabelasganhamapelidoscolocandooslogoemfrentetabela,ecamposatravsdapalavrachave AS(COMO).Camposcalculados,concactenadossofreqentementereferenciadosporalias.SELECT A.MATRICULA,A.NOMEASNOMEALUNO FROMALUNOA; SELECT A.MATRICULA,A.NOMEASNOMEALUNO,C.CODCURSO FROMALUNOA,CURSOC WHEREA.CODCURSO=C.CODCURSO;Condies AclusulaWHEREexpressaacondioONDE.utilizadapara: Filtrarosregistrosdadaumaoumaisrestries; Relacionartabelas.Oscamposqueseroutilizadosnafiltragemnoprecisamserexibidosnoresultadodaconsulta. AclsulaWHEREusadaSEMPREapsalistadetabelas. Filtrandodados Parafiltrardados,necessriousaroperadoresoucomparadores.Osoperadoresbsicosso: Operador = > >= < Descrio iguala diferentede maiorque maiorouigual que menorque Exemplo CAMPO1=RAFAELCAMPO1=CAMPO5CAMPO1=5 CAMPO1RAFAELCAMPO1CAMPO5CAMPO1 5 CAMPO1>CAMPO5CAMPO1>5 CAMPO1>=CAMPO5CAMPO1>=5 CAMPO13/*EovalordocampoDATANASCsejamaiordoque01/01/1980*/ ANDDATANASC>'19800101'; /*Selecionartodososcampos*/ SELECT* /*databelaALUNO*/ FROMALUNO /*onde*/ WHERE /*ovalordocampoMATRICULAsejaiguala200401542*/ MATRICULA='200401542' /*OUovalordocampoMATRICULAsejaiguala200306482*/ ORMATRICULA='200306482';Ousodeparentesespodemodificaraordemdeavaliao;osparentesestemprioridadesobreo operador,assimcomoasexpressesaritmticas. RelacionandoTabelas Relacionartabelasumaformamuitoimportantedecruzamentodedados,etambmamais simples.Aformadefazeristoaseguinte: 1. IdentifiquearelaoentrecampoCHAVEESTRANGEIRAecomparecomocampoque CHAVEPRIMRIAdaTABELAESTRANGEIRA(*); 2. Crieumacondiorelacionandooscamposdasduastabelas,comooperadorigual; 3. Repitaparacadarelacionamentodatabela. Estetrabalhosetornamaisminuciosoquandoexistemvriastabelasrelacionadas. Considerandoastabelas:CREATETABLECURSO( CODCURSOCHAR(3)NOTNULL, DESCRICAOVARCHAR(50), PRIMARYKEY(CODCURSO) ); CREATETABLETURMA( CODTURMACHAR(3)NOTNULL, DESCRICAOVARCHAR(20), PRIMARYKEY(CODTURMA) ); CREATETABLEALUNO( MATRICULACHAR(9)NOTNULL, NOMEVARCHAR(50), DATANASCDATE, DISCIPLINASINTEGER, CODCURSOCHAR(3), CODTURMACHAR(3), PRIMARYKEY(MATRICULA), FOREIGNKEY(CODCURSO)REFERENCESCURSO(CODCURSO), FOREIGNKEY(CODTURMA)REFERENCESTURMA(CODTURMA) );Umaconsultaparaverificaroalunocomseucursoeturmaseria:/*SelecionarcamposMATRICULA,NOME,DESCRICAOdoCursoeDESCRICAOTurma*/ SELECTALUNO.MATRICULA,ALUNO.NOME,CURSO.DESCRICAO,TURMA.DESCRICAO /*dastabelas*/ FROMALUNO,CURSO,TURMA /*onde*/WHERE /*vinculaALUNOaCURSO*/ ALUNO.CODCURSO=CURSO.CODCURSO /*EvinculaALUNOaTURMA*/ ANDALUNO.CODTURMA=TURMA.CODTURMA;PercebaquefoinecessrioespecificaroscamposDESCRICAO,CODTURMA,CODCURSO,pois aparecemmaisdeumaveznoresultadoexistememmaisdeumatabela. Ordenao(ORDERBY) AclusulaORDERBYpermiteordenaroresultadoporcamposdastabelasenvolvidas.Suasintaxe simples,eSEMPREAPSofinaldascondiesdaclusulaWHERE,seelaexistirouaps ondeelaestaria. Podeseinformarmaisdeumcampo;destaforma,serordenadoprimeiramentepeloprimeiroda lista,emseguidaporcadaumdosdemais. possveldeterminaraformadeordenao:ASC,ascendente,queopadrocasonosejainformada,exibeosregistrosemordem alfabtica,numericamentecrescenteoudatasmaisantigasprimeiro,conformeotipodo campo.; DESC,descendente,exibeosregistrosemordemalfabticainversa,numericamente decrescenteoudatasmaisnovasprimeiro,conformeotipodocampo.SELECTALUNO.MATRICULA,ALUNO.NOME,CURSO.DESCRICAO,TURMA.DESCRICAO FROMALUNO,CURSO,TURMA WHERE ALUNO.CODCURSO=CURSO.CODCURSO ANDALUNO.CODTURMA=TURMA.CODTURMA /*Ordenandopelocurso,depoispelaturma,depoisemordemalfabticaonome dosalunos*/ ORDERBYCURSO.CODCURSO,TURMA.CODTURMA,ALUNO.NOME; SELECT * FROMALUNOS /*Ordenandoporalunosmaisnovos*/ ORDERBYDATANASCDESC;Camposcalculados,concatenaoefunes OFIREBIRDpermiteaexecuodealgumasoperaesentre OFirebirdpossuiumconjuntoreduzidodefunes Agrupamento(GROUPeHAVING)AtualizandoDados(UPDATE)ParaatualizardadosemumatabelautilizamosocomandoUPDATE.ApalavrachaveSET (definir)defineoscamposaseremalterados.AsintaxedocomandoUPDATEquasesempre utilizadaemconjuntocomaclusulaWHERE,restringindoosregistrosaserematualizados.Isto nosgera3sintaxesbsicas:AlterandoTODOSOSREGISTROSsemclusulaWHERE:/*Definindotabela*/ UPDATETABELA /*Listadecamposaserematualizadosseparadosporvrgula*/ SET CAMPO1='NovoValor', CAMPO2=45, CAMPO3='20061231';AlterandoAPENASUMREGISTROESPECFICOclusulaWHEREfiltrandoachave primriadatabela:/*Definindotabela*/ UPDATETABELA /*Listadecamposaserematualizadosseparadosporvrgula*/ SET CAMPO1='NovoValor', CAMPO2=45, CAMPO3='20061231' /*Filtrandoachaveprimria*/ WHERE CAMPO_QUE__CHAVE_PRIMRIA=4587AlterandoVRIOSREGISTROSclusulaWHEREfiltrandoumoumaisregistrosda tabela:/*Definindotabela*/ UPDATETABELA /*Listadecamposaserematualizadosseparadosporvrgula*/ SET CAMPO1='NovoValor', CAMPO2=45, CAMPO3='20061231' /*Filtrandovriosregistros*/ WHERE CAMPO1='Valorqualquer' ANDCAMPO2>2;Umcuidadomuitograndenecessrioquandoatualizasevriosregistrossimultaneamente,para evitarqueoUPDATEgereatualizaesemmaisregistrosqueodesejado.Umaprticainteligente realizarumSELECTcomomesmofiltro(clsulaWHERE)antes,testandoseaatualizaoser realizadanosregistroscorretos.Exemplo:/*Primeiroselecionamososregistroseconferimosofiltro*/ SELECT*FROMTABELA WHERE CAMPO1='Valorqualquer' ANDCAMPO2>2; /*Seosregistrosestiveremcorretos,entorealizaseaatualizao*/ UPDATETABELA SET CAMPO1='NovoValor', CAMPO2=45, CAMPO3='20061231' WHERE CAMPO1='Valorqualquer' ANDCAMPO2>2;OutraformalembrarqueasalteraessseroconfirmadasapsumCOMMIT.Ento, possvelselecionarosdadosapsaatualizao,checloseapenasdepoisrealizaroCOMMIT. AssimcomoocomandoINSERT,oUPDATEgerarerrosseovaloratualizadonorespeitarotipo/tamanhodocampo,chavesestrangeirasoutivererrosdesintaxe. Vejamosumexemploconsiderandoatabelaabaixo:CREATETABLEALUNO( MATRICULACHAR(9)NOTNULL, NOMEVARCHAR(50), DATANASCDATE, DISCIPLINASINTEGER, PRIMARYKEY(MATRICULA) );Nosexemplosabaixoconsiderasequeexistamalgunsregistrosnatabela.AlterandoTODOSOSREGISTROSsemclusulaWHERE:/*Definindotabela*/ UPDATEALUNO /*Listadecamposaserematualizadosseparadosporvrgula AtualizandoocampoDISPLINASpara5 */ SET DISCIPLINAS=5;AlterandoAPENASUMREGISTROESPECFICOclusulaWHEREfiltrandoachave primriadatabela:/*Definindotabela*/ UPDATEALUNO /*Listadecamposaserematualizadosseparadosporvrgula AtualizandoocampoDISPLINASpara5 */ SET DISCIPLINAS=5 /*FiltrandoapenasumregistroatravsdachaveprimriaMATRICULA*/ WHERE MATRICULA=217AlterandoVRIOSREGISTROSclusulaWHEREfiltrandoumoumaisregistrosda tabela:/*Definindotabela*/ UPDATEALUNO /*Listadecamposaserematualizadosseparadosporvrgula AtualizandoocampoDISPLINASpara5 */ SET DISCIPLINAS=5 /*Filtrandovriosregistros*/ WHERE MATRICULA>45 ANDDATANASC>'19800101'ExcluindoDados(DELETE)ParaatualizardadosemumatabelautilizamosocomandoDELETE.Asintaxedocomando DELETEquasesempreutilizadaemconjuntocomaclusulaWHERE,restringindoosregistros aserematualizados.FuncionacomoumSELECTqueapagaosregistrosselecionados.Istonos gera3sintaxesbsicas,comonoUPDATE:ExcluindoTODOSOSREGISTROSsemclusulaWHERE:/*Definindotabela*/ DELETEFROMTABELA;ExcluindoAPENASUMREGISTROESPECFICOclusulaWHEREfiltrandoa chaveprimriadatabela:/*Definindotabela*/ DELETEFROMTABELA /*Filtrandoachaveprimria*/ WHERE CAMPO_QUE__CHAVE_PRIMRIA=4587FiltrandoVRIOSREGISTROSclusulaWHEREfiltrandoumoumaisregistrosda tabela:/*Definindotabela*/ DELETEFROMTABELA /*Filtrandovriosregistros*/ WHERE CAMPO1='Valorqualquer' ANDCAMPO2>2;Umcuidadomuitograndenecessrioquandoexcluisevriosregistrossimultaneamente,para evitarqueoDELETEexcluamaisregistrosqueodesejadodesejado.Umaprticainteligente realizarumSELECTcomomesmofiltro(clsulaWHERE)antes,testandoseaexclusoser realizadanosregistroscorretos(mesmadicausadaparaoUPDATE.Exemplo:/*Primeiroselecionamososregistroseconferimosofiltro*/ SELECT*FROMTABELA WHERE CAMPO1='Valorqualquer' ANDCAMPO2>2; /*Seosregistrosestiveremcorretos,entorealizaseaatualizao*/ DELETEFROMTABELA WHERE CAMPO1='Valorqualquer' ANDCAMPO2>2;OutraformalembrarqueasalteraessseroconfirmadasapsumCOMMIT.Ento, possvelselecionarosdadosapsaatualizao,checloseapenasdepoisrealizaroCOMMIT. OcomandoDELETEgerarerrosseovaloratualizadonorespeitarotipo/tamanhodocampo, chavesestrangeirasoutivererrosdesintaxe.Emespecial,apagarregistrosdetabelasquesotabelas estrangeirasdeoutraspodemgerarerrosdeviolaodechaveestrangeira(violationof FOREIGNKEY). Vejamosumexemploconsiderandoatabelaabaixo:CREATETABLEALUNO( MATRICULACHAR(9)NOTNULL, NOMEVARCHAR(50), DATANASCDATE, ISCIPLINASINTEGER, CODCURSOCHAR(3), CODTURMACHAR(3), PRIMARYKEY(MATRICULA) );Nosexemplosabaixoconsiderasequeexistamalgunsregistrosnatabela.ExcluindoTODOSOSREGISTROSsemclusulaWHERE:/*Definindotabela*/ DELETEFROMALUNO;ExcluindoAPENASUMREGISTROESPECFICOclusulaWHEREfiltrandoa chaveprimriadatabela:/*Definindotabela*/ DELETEFROMALUNO /*FiltrandoapenasumregistroatravsdachaveprimriaMATRICULA*/ WHERE MATRICULA=217ExcluindoVRIOSREGISTROSclusulaWHEREfiltrandoumoumaisregistrosda tabela:/*Definindotabela*/ DELETEFROMALUNO /*Filtrandovriosregistros*/ WHERE MATRICULA>45 ANDDATANASC>'19800101'SQLDCLBsico(ManipulandoUsuriosePermisses)OscomandosDCLtmafunodedefinirpermissesdeacessoaumusurioemtabelasdeum bancodedados. OcomandoGRANTutilizadoparapermitiroacessoeocomandoREVOKEpararevoglo.Cada bancodedadospossuialgumaspeculiaridadesnasintaxe,masoscomandoexplanadosaseguirso bastantegenricos. Obs.:ParacriaodeusuriosnoFIREBIRDnecessrioumaferramentaespecfica.Vejaem manutencao_de_usuarioscomocriarusurioscomoIBOConsole.TiposdePrivilgios PermitindoacessoAsintaxebsicadepermisso:GRANT[lista_de_privilegios]ON[objeto(s)]TO[usuario];ParapermitiraousurioFULANOrealizarseleesnatabelaCLIENTE,ocomandoseria:GRANTSELECTONCLIENTETOFULANO;ParapermitiraousurioFULANOrealizarprivilgioscompletosnobancoDEVA,ocomando seria:GRANTALLONDEVA.*TOFULANO;RevogandoacessoAsintaxebsica:REVOKE[lista_de_privilegios]ON[objeto(s)]TO[usuario];Ou,comosepodeperceber,amesmasintaxedoGRANT,masparafazerocontrrio,revogaro privilgio. ParacancelarapermissodousurioFULANOderealizarseleesnatabelaCLIENTE,o comandoseria:REVOKESELECTONDEVA.CLIENTETOFULANO;PararevogaroacessocompletamenteaousurioFULANObancoDEVA,ocomandoseria:REVOKEALLONDEVA.*TOFULANO;Exemplo01DEVADEVA(DevaldirCatarino)odonodacantinamaisantigadenossafaculdade,ealvofcilde nossosestudos. Abaixotemosumdiagramasimplesdeumsistemaparasuacantina.DiagramadeClassesUMLEstediagramafoielaboradonasaulasdeAnlisedeProjetoseSistemasdoProf.AlexandreMonge, naFASB. Ofontedestediagrama(emformatodoDIA)estdisponvelaquiCriaodasTabelasdoBancodeDados(DDL)/* TabelaTIPOCLIENTE */ CREATETABLETIPOCLIENTE( CODTIPOCLIENTEINTEGERNOTNULL, DESCRICAOVARCHAR(20), CREDITOFLOAT, PRIMARYKEY(CODTIPOCLIENTE) ); CREATEGENERATORTIPOCLIENTE_GEN; SETTERM^; CREATETRIGGER"TRIG_TIPOCLIENTE_ID"FOR"TIPOCLIENTE" ACTIVEBEFOREINSERTPOSITION0 AS begin IF(new.CODTIPOCLIENTEISNULL)then begin new.CODTIPOCLIENTE=gen_id(TIPOCLIENTE_GEN,1); end end ^ COMMITWORK^ SETTERM;^ /* TabelaCLIENTE */ CREATETABLECLIENTE( CODCLIENTEINTEGERNOTNULL, CODTIPOCLIENTEINTEGERNOTNULL, NOMEVARCHAR(70), CPFCHAR(11), RGVARCHAR(15), APELIDOVARCHAR(15), TELEFONECHAR(10), CELULARCHAR(10), LOGRADOUROVARCHAR(40), NUMEROVARCHAR(10), BAIRROVARCHAR(20), CEPCHAR(8), CIDADEVARCHAR(30), ESTADOCHAR(2), DATANASCIMENTODATE, SITUACAOCHAR(1), CREDITOFLOAT, PRIMARYKEY(CODCLIENTE), FOREIGNKEY(CODTIPOCLIENTE)REFERENCESTIPOCLIENTE(CODTIPOCLIENTE) ); CREATEGENERATORCLIENTE_GEN; SETTERM^; CREATETRIGGER"TRIG_CLIENTE_ID"FOR"CLIENTE" ACTIVEBEFOREINSERTPOSITION0AS begin IF(new.CODCLIENTEISNULL)then begin new.CODCLIENTE=gen_id(CLIENTE_GEN,1); end end ^ COMMITWORK^ SETTERM;^ /* TabelaVENDA */ CREATETABLEVENDA( CODVENDAINTEGERNOTNULL, CODCLIENTEINTEGERNOTNULL, DATAVENDADATE, VALORTOTALFLOAT, PRIMARYKEY(CODVENDA), FOREIGNKEY(CODCLIENTE)REFERENCESCLIENTE(CODCLIENTE) ); CREATEGENERATORVENDA_GEN; SETTERM^; CREATETRIGGER"TRIG_VENDA_ID"FOR"VENDA" ACTIVEBEFOREINSERTPOSITION0 AS begin IF(new.CODVENDAISNULL)then begin new.CODVENDA=gen_id(VENDA_GEN,1); end end ^ COMMITWORK^ SETTERM;^ /* TabelaPRODUTO */ CREATETABLEPRODUTO( CODPRODUTOINTEGERNOTNULL, DESCRICAOVARCHAR(40), PRECOFLOAT, DATAVALIDADEDATE, DATACOMPRADATE, PRIMARYKEY(CODPRODUTO) ); CREATEGENERATORPRODUTO_GEN; SETTERM^; CREATETRIGGER"TRIG_PRODUTO_ID"FOR"PRODUTO" ACTIVEBEFOREINSERTPOSITION0 AS begin IF(new.CODPRODUTOISNULL)then begin new.CODPRODUTO=gen_id(PRODUTO_GEN,1); end end ^COMMITWORK^ SETTERM;^ /* TabelaITENSVENDA */ CREATETABLEITENSVENDA( CODITEMVENDAINTEGERNOTNULL, CODVENDAINTEGERNOTNULL, CODPRODUTOINTEGERNOTNULL, QUANTIDADEINTEGERNOTNULL, VALORUNITARIOFLOATNOTNULL, VALORPARCIALFLOATNOTNULL, PRIMARYKEY(CODITEMVENDA), FOREIGNKEY(CODVENDA)REFERENCESVENDA(CODVENDA), FOREIGNKEY(CODPRODUTO)REFERENCESPRODUTO(CODPRODUTO) ); CREATEGENERATORITENSVENDA_GEN; SETTERM^; CREATETRIGGER"TRIG_ITENSVENDA_ID"FOR"ITENSVENDA" ACTIVEBEFOREINSERTPOSITION0 AS begin IF(new.CODITEMVENDAISNULL)then begin new.CODITEMVENDA=gen_id(ITENSVENDA_GEN,1); end end ^ COMMITWORK^ SETTERM;^ /* TabelaCONTASRECEBER */ CREATETABLECONTASRECEBER( CODCTARECEBERINTEGERNOTNULL, CODVENDAINTEGERNOTNULL, VALORFLOATNOTNULL, DATAVENCIMENTODATENOTNULL, DATAQUITACAODATE, SITUACAOCHAR(1)NOTNULL, SALDOFLOAT, PRIMARYKEY(CODCTARECEBER), FOREIGNKEY(CODVENDA)REFERENCESVENDA(CODVENDA) ); CREATEGENERATORCONTASRECEBER_GEN; SETTERM^; CREATETRIGGER"TRIG_CONTASRECEBER_ID"FOR"CONTASRECEBER" ACTIVEBEFOREINSERTPOSITION0 AS begin IF(new.CODCTARECEBERISNULL)then begin new.CODCTARECEBER=gen_id(CONTASRECEBER_GEN,1); end end ^ COMMITWORK^ SETTERM;^ /* TabelaFORMAPAGTO */ CREATETABLEFORMAPAGTO( CODFORMAPAGTOINTEGERNOTNULL, DESCRICAOVARCHAR(20), PRIMARYKEY(CODFORMAPAGTO) ); CREATEGENERATORFORMAPAGTO_GEN; SETTERM^; CREATETRIGGER"TRIG_FORMAPAGTO_ID"FOR"FORMAPAGTO" ACTIVEBEFOREINSERTPOSITION0 AS begin IF(new.CODFORMAPAGTOISNULL)then begin new.CODFORMAPAGTO=gen_id(FORMAPAGTO_GEN,1); end end ^ COMMITWORK^ SETTERM;^ /* TabelaCONTASRECEBIDAS */ CREATETABLECONTASRECEBIDAS( CODCTARECEBIMENTOINTEGERNOTNULL, CODCTARECEBERINTEGERNOTNULL, CODFORMAPAGTOINTEGERNOTNULL, VALORRECEBIDOFLOATNOTNULL, DATAPAGAMENTODATENOTNULL, PRIMARYKEY(CODCTARECEBIMENTO), FOREIGNKEY(CODCTARECEBER)REFERENCESCONTASRECEBER(CODCTARECEBER), FOREIGNKEY(CODFORMAPAGTO)REFERENCESFORMAPAGTO(CODFORMAPAGTO) ); CREATEGENERATORCONTASRECEBIDAS_GEN; SETTERM^; CREATETRIGGER"TRIG_CONTASRECEBIDAS_ID"FOR"CONTASRECEBIDAS" ACTIVEBEFOREINSERTPOSITION0 AS begin IF(new.CODCTARECEBIMENTOISNULL)then begin new.CODCTARECEBIMENTO=gen_id(CONTASRECEBIDAS_GEN,1); end end ^ COMMITWORK^ SETTERM;^InserodeDadosnastabelas/*TIPOCLIENTE*/ INSERTINTO"TIPOCLIENTE"("CODTIPOCLIENTE","DESCRICAO", "CREDITO")VALUES('1','TIMO','1000');INSERTINTO"TIPOCLIENTE"("CODTIPOCLIENTE","DESCRICAO", "CREDITO")VALUES('2','BOM','750'); INSERTINTO"TIPOCLIENTE"("CODTIPOCLIENTE","DESCRICAO", "CREDITO")VALUES('3','REGULAR','400'); INSERTINTO"TIPOCLIENTE"("CODTIPOCLIENTE","DESCRICAO", "CREDITO")VALUES('4','RUIM','0'); SETGENERATORTIPOCLIENTE_GENTO4; /*CLIENTE*/ INSERTINTO"CLIENTE"("CODCLIENTE","CODTIPOCLIENTE","NOME", "CPF","RG","APELIDO","TELEFONE","CELULAR","LOGRADOURO", "NUMERO","BAIRRO","CEP","CIDADE","ESTADO", "DATANASCIMENTO","SITUACAO","CREDITO")VALUES('1','2', 'RAFAELDASILVAGOULART','54681387346','3214SSPBA','RAFAEL', NULL,NULL,NULL,NULL,NULL,NULL,'BARREIRAS','BA','1972 1128','1',NULL); INSERTINTO"CLIENTE"("CODCLIENTE","CODTIPOCLIENTE","NOME", "CPF","RG","APELIDO","TELEFONE","CELULAR","LOGRADOURO", "NUMERO","BAIRRO","CEP","CIDADE","ESTADO", "DATANASCIMENTO","SITUACAO","CREDITO")VALUES('2','3', 'FABIOFELICIOFIGUEIREDO','87643873438','1454SSPBA','FABIO', NULL,NULL,NULL,NULL,NULL,NULL,'IBOTIRAMA','BA','1979 0320','1',NULL); INSERTINTO"CLIENTE"("CODCLIENTE","CODTIPOCLIENTE","NOME", "CPF","RG","APELIDO","TELEFONE","CELULAR","LOGRADOURO", "NUMERO","BAIRRO","CEP","CIDADE","ESTADO", "DATANASCIMENTO","SITUACAO","CREDITO")VALUES('3','1', 'DIVANILSONDEQUEIROZRODRIGUES','00135467687','32135SSPCE', 'DIVAN',NULL,NULL,NULL,NULL,NULL,NULL,'LUISEDUARDO MAGALHAES','BA','19810515','1',NULL); INSERTINTO"CLIENTE"("CODCLIENTE","CODTIPOCLIENTE","NOME", "CPF","RG","APELIDO","TELEFONE","CELULAR","LOGRADOURO", "NUMERO","BAIRRO","CEP","CIDADE","ESTADO", "DATANASCIMENTO","SITUACAO","CREDITO")VALUES('4','4', 'LIMAYCONVIANCARVALHO','65483213146','1114SSPBA','BOI',NULL, NULL,NULL,NULL,NULL,NULL,'BARREIRAS','BA','19850801', '0',NULL); INSERTINTO"CLIENTE"("CODCLIENTE","CODTIPOCLIENTE","NOME", "CPF","RG","APELIDO","TELEFONE","CELULAR","LOGRADOURO", "NUMERO","BAIRRO","CEP","CIDADE","ESTADO", "DATANASCIMENTO","SITUACAO","CREDITO")VALUES('5','2', 'ROSASILVADELIMA','88035468647','8734SSPBA','ROSINHA',NULL, NULL,NULL,NULL,NULL,NULL,'BARREIRAS','BA','19881106', '1',NULL); INSERTINTO"CLIENTE"("CODCLIENTE","CODTIPOCLIENTE","NOME", "CPF","RG","APELIDO","TELEFONE","CELULAR","LOGRADOURO", "NUMERO","BAIRRO","CEP","CIDADE","ESTADO", "DATANASCIMENTO","SITUACAO","CREDITO")VALUES('6','1', 'MARILUCIAGOMESGUIMARESCARVALHO','00346879798','13578SSPBA', 'MARILUCIA',NULL,NULL,NULL,NULL,NULL,NULL,'SAODESIDERIO', 'BA','19830612','1',NULL); INSERTINTO"CLIENTE"("CODCLIENTE","CODTIPOCLIENTE","NOME", "CPF","RG","APELIDO","TELEFONE","CELULAR","LOGRADOURO", "NUMERO","BAIRRO","CEP","CIDADE","ESTADO", "DATANASCIMENTO","SITUACAO","CREDITO")VALUES('7','4', 'TIAGOJORDOROSSIMENSCH','03857876543','9834SSPDF','TIAGO', NULL,NULL,NULL,NULL,NULL,NULL,'SAODESIDERIO','BA', '19760701','0',NULL); INSERTINTO"CLIENTE"("CODCLIENTE","CODTIPOCLIENTE","NOME", "CPF","RG","APELIDO","TELEFONE","CELULAR","LOGRADOURO", "NUMERO","BAIRRO","CEP","CIDADE","ESTADO", "DATANASCIMENTO","SITUACAO","CREDITO")VALUES('8','3', 'FRANCOFLORIANOGONALVESAZEVEDO','32164987321','01245SSPBA', 'FRANCO',NULL,NULL,NULL,NULL,NULL,NULL,'LUISEDUARDOMAGALHAES','BA','19890502','1',NULL); INSERTINTO"CLIENTE"("CODCLIENTE","CODTIPOCLIENTE","NOME", "CPF","RG","APELIDO","TELEFONE","CELULAR","LOGRADOURO", "NUMERO","BAIRRO","CEP","CIDADE","ESTADO", "DATANASCIMENTO","SITUACAO","CREDITO")VALUES('9','4', 'MANOELVICENTEFRANCELINOFILHO','24687498749','1346546SSPBA', 'MANEL',NULL,NULL,NULL,NULL,NULL,NULL,'BARREIRAS', 'BA','19880902','0',NULL); INSERTINTO"CLIENTE"("CODCLIENTE","CODTIPOCLIENTE","NOME", "CPF","RG","APELIDO","TELEFONE","CELULAR","LOGRADOURO", "NUMERO","BAIRRO","CEP","CIDADE","ESTADO", "DATANASCIMENTO","SITUACAO","CREDITO")VALUES('10','3', 'RICARDOLUIZQUEIROZCRUZ','38987134687','3132SSPBA','BAHIA', NULL,NULL,NULL,NULL,NULL,NULL,'LUISEDUARDOMAGALHAES', 'BA','19751003','1',NULL); SETGENERATORCLIENTE_GENTO10; /*PRODUTO*/ INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('1','CELULAR', '199,899993896484',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('2','CARREGADORCELULAR', '25,1000003814697',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('3','MICROFONE','15', NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('4','WEBCAM','85,5', NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('5','DRIVEGRAVADORCDRW', '120',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('6','DRIVEGRAVADORCOMBO CDRW/LEITORDVD','150',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('7','DRIVEGRAVADORDVDRW/ CDRW','210',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('8','MOUSESERIAL', '12',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('9','MOUSEPS2','17', NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('10','MOUSETICO','20', NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('11','TECLADOMULTIMIDIA', '35',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('12','TECLADOPDURO', '20',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('13','SCANNER','150', NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('14','MONITOR15POLEGADAS', '300',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('15','MONITOR17POLEGADAS', '420',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('16','MONITOR15POLEGADASLCD','750',NULL,NULL); INSERTINTO"PRODUTO"("CODPRODUTO","DESCRICAO","PRECO", "DATAVALIDADE","DATACOMPRA")VALUES('17','MONITOR17POLEGADAS LCD','980',NULL,NULL); SETGENERATORPRODUTO_GENTO17; /*VENDA*/ INSERTINTO"VENDA"("CODVENDA","CODCLIENTE","DATAVENDA", "VALORTOTAL")VALUES('1','3','20060105',NULL); INSERTINTO"VENDA"("CODVENDA","CODCLIENTE","DATAVENDA", "VALORTOTAL")VALUES('2','6','20060107',NULL); INSERTINTO"VENDA"("CODVENDA","CODCLIENTE","DATAVENDA", "VALORTOTAL")VALUES('3','1','20060107',NULL); INSERTINTO"VENDA"("CODVENDA","CODCLIENTE","DATAVENDA", "VALORTOTAL")VALUES('4','3','20060110',NULL); INSERTINTO"VENDA"("CODVENDA","CODCLIENTE","DATAVENDA", "VALORTOTAL")VALUES('5','10','20060115',NULL); INSERTINTO"VENDA"("CODVENDA","CODCLIENTE","DATAVENDA", "VALORTOTAL")VALUES('6','4','20060120',NULL); INSERTINTO"VENDA"("CODVENDA","CODCLIENTE","DATAVENDA", "VALORTOTAL")VALUES('7','5','20060125',NULL); INSERTINTO"VENDA"("CODVENDA","CODCLIENTE","DATAVENDA", "VALORTOTAL")VALUES('8','1','20060128',NULL); INSERTINTO"VENDA"("CODVENDA","CODCLIENTE","DATAVENDA", "VALORTOTAL")VALUES('9','8','20060202',NULL);