Você está na página 1de 7

Apostila de comandos bsicos de SQL e Banco de Dados Service

O que Banco de Dados?


Bancos de dados so conjuntos de informaes organizadas, que permitem manipulaes e visualizaes. Um exemplo de banco de dados uma planlha de Excel, com uma lista de produtos, alunos, etc. Existem bancos de dados SGDB e GA. Um bancos de dados padro Cliente-Servidor (SGDB Sistema Gerencial de Banco de Dados) , se caracteriza o uso de um programa, instalado no servidor, que se conecta aos arquivos de dados gravados no disco rgido, e que se encarrega de fazer todas as aes gerenciando o banco de dados (busca, incluso, alterao). Os clientes enviam para o servidor um comando em forma textual, este comando recebido pelo SGDB no servidor que toma a ao necessria, devoldendo ao cliente o resultado do comando. O Service usa o banco de dados SQL Server, que um SGDB, ou seja, existem os arquivos Service.mdf e Service_log.ldf que so os arquivos que gravam os dados (na realidade os dados em s esto somente no Service.mdf, o arquivo ldf um log, ou seja, um arquivo que registra todas as mudanas ocorridas no banco de dados), porm, no possvel abrir diretamente esses arquivos inserindo dados, eles funcionam em conjunto com o SQL Server, por isso precisam ser Attachados. Este Attach Database faz com que o SQL Server d um nome lgico para este banco de dados e tenha conhecimento de sua existncia, sabendo tambm onde esto os arquivos de dados. Somente aps o attach que podemos acessar os dados destes arquivos, atravs de comandos enviados para o SQL Server, que este por sua vez manipula os arquivos e retorna os dados para o cliente que requisitou o comando, em outras palavras, um .mdf s til se est attachado a um SQL Server instalado. No caso do SQL Server, o arquivo .mdf armazena todos os objetos do banco de dados, tabelas, ndices, consultas etc, num nico arquivo. A grande vantagem do SQDB todo o procedimento de dados estar concentrado no Servidor, evitando concorrncia de dados entre as estaes da rede, melhorando a performance e evitando danificaes nos dados em casos de instabilidade na rede. A performance (velocidade) do SGDB est diretamente ligado ao Servidor, quanto mais mquina, mais resultados. A rede em s tambm beneficiada, visto que s trafegam por elas informaes restritas ao necessrio, por exemplo, o Cliente manda para o Servidor uma frase: Select * From Clientes , e o Servidor busca os dados e devolve a lista de clientes com os seus dados para o Cliente, evitando que o cliente abra o arquivo com todas as informaes mais existentesno mesmo arquivo, e que todos estes dados viajem pela rede para que a mquina que requisitou os dados separem os dados necessrios. Um GA (Gerenciador de Arquivos) um modelo de banco de dados mais antigo, que em alguns momentos simula um SGDB, so exemplos deste tipo de banco o padro xBase, com arquivos .dbf ou .db por exemplo. Neste tipo de banco de dados, o arquivo aberto e alterado diretamente, ou seja, no existe um software que faz o meio de campo entre a aplicao e o arquivo de dados. Neste caso, o Servidor deixa de o ser propriamente dito, e passa a ser um mero repositrio de dados. Neste tipo de banco de dados, cada arquivo um objeto do banco de dados, cada arquivo .dbf representa uma tabela, por exemplo, cada .cdx ou .ntx, representa um ndice de uma tabela. No existem relaes entre as tabelas, por exemplo, os fornecedores, e os pedidos desses fornecedores, so dois arquivos distintos, e a juno destes dados feita pela aplicao, no micro do cliente. O GA prejudica a rede, por causa da carga maior de dados que ficam trafegando, o Servidor (Repositrio de Arquivos, na verdade) porqu vai ter inmeros computadores acessados e com arquivos em comum abertos, prejudica a concorrncia de dados, pois no controla quando dois computadores esto gravando o mesmo registro e, por ter o arquivo aberto quando acessado, tm alto ndice de danificao, quando ocorre algum problema de comunicao na rede.

Meu sistema feito em SQL Server!


A afirmao acima um grande erro, como foi deixado claro, o SQL Server um SGDB, ou seja, um programa instalado no Servidor que controla as transaes de dados, existe ento um software (Front-End) que se encarrega de conectar-se ao SQL Server e, em enviando e recebendo os dados do SQL Server, fazem as transaes de dados ficarem mais simples, ou seja, fazem a interface com os usurios. Um usurio jamais vai conseguir abrir uma ferramenta, o Query Analizer, por exemplo, e aplicar um Update para mudar os dados de um cliente, o papel do sistema este, trazer para o usurio uma tela onde ele altera os dados de forma simples e clara e clica no Gravar, onde o sistema faz o envio do pedido de Update no SQL Server, e este trabalha alterando de forma real os dados que esto gravados no arquivo .mdf. O correto afirmar que o sistema feito em Visual Basic (linguagem de programao da aplicao) e que utiliza o banco de dados em SQL Server. Existem pessoas que se confundem e fazem afirmaes como a que est acima, porqu antigamente, no FoxPro, por exemplo, a linguagem onde se fazia o programa que tambm fazia o controle dos dados, no existia o software do meio de campo, ou seja, tm caractersticas GA, e portanto o tudo era feito no FoxPro.

Objetos do Banco de Dados


Tomaremos daqui pra frente somente as caractersticas de SGDB e do SQL Server, em questo no Service. Um banco de dados dividido em vrios objetos, cada um com uma funcionalidade, abaixo explicamos alguns:

Tabelas: So os objetos onde esto gravados os dados. Definida tecnicamente como arranjo bidirecional dos dados
(linhas e colunas). Nelas so alocadas os dados de um mesmo tipo (exemplo, clientes, produtos) de forma organizada, em linhas e colunas, onde as linhas so chamadas de registros e as colunas de campos. Cada registro (linha) se refere a um item cadastrado, por exemplo, cada linha da tabela de clientes o cadastro de um cliente. Cada campo (coluna) um dado pertencente ao registro, por exemplo, o Endereo de um cliente especfico.

Tabela Clientes
CodCliente (Chave)
Registro

1 2

Nome Cleverson Luiz Cologni Joo da Silva

Endereo Rua Victor Hugo, 640 Rua Pedro Silva, 550

Campo

As tabelas so caracterizadas tambm por conter um campo exclusivo, ou seja, que no se repete, e que no pode ficar em branco, em cada registro, no exemplo acima este campo seria o CodCliente, este campo de cdigo, que no se repete em mais nenhum cliente na tabela, o nosso campo chave, em ingls o PK, Primary Key (Chave primria). Este campo necessrio para que seja possvel identificar o cliente na tabela, sabe-se com certeza que este cliente 1 o Cleverson, em todas as tabelas que aparecerem, por exemplo, se numa tabela oramento existir um campo CodCliente e em um registro existir o nmero 1, consegue associar as informaes trazendo o nome deste cliente, endereo e demais dados da tabela de clientes. Nesta tabela de oramentos vai existir um cdigo ou um nmero de oramento que vai identificar em exclusivo cada oramento. Este campo CodCliente tambm por extenso um ndice, que um outro objeto do banco de dados, os ndices fazem com que os dados destas colunas seja internamente organizadas, alfabetica ou numericamente, por exemplo, para que quando ocorrer uma busca por um dado deste campo, o resultado seja trazido mais rpido. Se coloque no papel do computador, imagine-se buscando entre inmeras fichas a ficha de nmero 9567, porm, as fichas esto embaralhadas, voc ter que olhar ficha por ficha at encontrar a devida, caso elas estivessem em ordem numrica, a sua busca seria bem mais eficiente. Esse o papel do ndice, tornar os dados organizados no campo, fazendo com que a busca nele seja mais rpida. Todos os campos Chave so indexados, por natureza, mas possvel criar outros ndices, em outros campos, a fim de melhorar a performance numa eventual busca, por exemplo, o sistema faz consultas na tabela clientes atravs do CPF, convm indexar este campo, afim de melhorar a velocidade da busca. Deixando claro, existe apenas um nico campo chave (PK) numa tabela, mas podem existir diversos campos com ndice. Neste ponto voc pode estar se perguntado: Por qu o campo CPF no o campo chave, ao invs de adotar um cdigo interno para cada cliente? - Nem sempre dados prprios podem figurar como PK, o CPF fica dentro da primeira caracterstica, no se repetir em nenhum dos clientes, mas ele falha em outra, nunca poder ficar em branco. Ou seja, caso ficasse institudo o CPF como PK, o sistema s aceitaria, obrigatoriamente, clientes que tivessem o CPF cadastrado. Sabe-se por vivncia, que nem sempre se dispe deste dado. Uma caracterstica dos SGDB o relacionamento entre as tabelas, que do a estes bancos de dados a caracterstica de Banco de Dados Relacional (existem GA que so relacionais, como o caso do .mdb do Access). Neste caso, as informaes gravadas em uma tabela, podem ser relacionados, vinculados. Como no exemplo a seguir:

Tabela Fornecedores
CodFornecedo r 1001 1005 1006 Nome Teste Outro XXXX Fone (45)3277-0707 (45)3277-9090 (45)9999-9999 CodPedid o 15 17 18

Tabela Pedidos
CodFornecedor 1001 1005 1001 Data 31/01/2006 01/05/2006 02/05/2006 Valor 1500.00 2576.00 576.15

Viso: Pedidos/Fornecedores
CodPedido 15 17 18 CodFornecedor 1001 1005 1001 Nome Teste Outro Teste Fone (45)3277-0707 (54)3277-9090 (45)3277-0707 Data 31/01/2006 01/05/2006 02/05/2006 Valor 1500.00 2576.00 576.15

Na viso, os dados dos fornecedores podem ser trazidos atravs do seu cdigo, a viso pronta e completa retornada automaticamente pelo SQL Server, atravs do comando especfico. J em um banco de dados no-relacional, a montagem da viso acima possvel somente atravs da aplicao, carregando o primeiro pedido, posteriormente abrindo a tabela fornecedores, localizando o fornecedor e trazendo os dados, fechando a tabela fornecedores, e chamando o novo pedido, seguindo o mesmo processo diversas vezes, deixando claro a perda brusca de performance. Observao: o campo CodFornecedor da tabela Pedidos pode ter qualquer outro nome, no existe necessidade de que, para haver relacionamente, os campos tenham nomes iguais. Cada campo de uma tabela um tipo de dados, basicamente existem dados gravados em formatos de Texto (String), Numricos (Numeric) e Data (DateTime). Porm, existem diversos tipos de dados para cada formato, que variam o tamanho (comprimento) do valor gravado no campo e a forma como ele gravado. Somente para citar, no SQL Server, por exemplo, existem para gravar texto, entre outros, os tipos char, nvarchar, ntext. Os tipos char e nvarchar permitem que o programador defina quantas letras sero acomodadas no mximo em cada dado gravado no campo, por exemplo, 50 letras, porm, o tipo char, neste caso, sempre armazenaria 50 letras, caso o usurio gravasse um Ol, seriam preenchidos 47 espaos depois da palavra para preencher o campo, no caso do nvarchar, somente a palavra Ol seria gravada, percebe-se a, uma economia grande de espao, ambos

estes campos podem no mximo ser setados em 255 letras, a entra o tipo ntext, que permite texto de at 64.000 letras, porm, no pode ser indexado nem sofrer busca de dados. Uma parte importante do desenvolvimento do banco projetar corretamente o tamanho de cada campo, evitando gasto desnecessrio de espao em disco e trfego desnecessrio de dados (espaos em branco, por exemplo) e tambm fazendo com que o tamanho setado seja suficiente para guardar os dados necessrios ao usurio. Caso tente-se gravar um dado maior que o setado, retornado erros, exemplo String too large to fit Texto muito grande para caber, ento podem ser colocados na aplicao testes para verificar se o usurio no digitou um texto com comprimento maior que o setado no banco de dados. Para informar os tipos de dados no SQL Server, tambm deve-se observar as diferenas quanto ao tipo. No caso dos textos, sempre entre aspas simples, ex: Insidesoft No caso dos nmeros, sem aspas, mas o caractere decimal o ponto, conforme o padro americano, ex: 1450.00 ou 23498.15 Nas datas, usar aspas simples, semelhante aos textos, e sempre colocar a data em padro americano (mm/dd/aaaa), ex: 10/27/2006

Vises: As vises ou consultas (View em ingls) so objetos gravados no banco de dados que quando executados

retornam dados, clculos ou unies de dados gravados nas tabelas. So objetos ento, que no gravam nada, so apenas um comando SQL gravado que busca dados em uma ou mais tabelas, podem executar clculos e filtros, retornando o resultado ao cliente. As consultas num banco podem ser executadas em qualquer tempo sem a necessidade de gravar como esta como uma viso. As consultas gravadas so um artifcio do programador para automatizar melhor um processo ou diminuir a necessidade de cdigo no sistema.

Comandos da Linguagem SQL


SQL Server o mesmo que a linguagem SQL? No. SQL Server um software SGDB que usa linguagem SQL para executar procedimentos. Porm, a linguagem SQL no exclusividade do SQL Server, ela aparece em inmeros bancos de dados, SGDB ou no, como Access (mdb), Firebird, Postgree, etc... SQL a sigla de Structured Query Language, em portugus, Linguagem Estruturada de Consulta, foi desenvolvida pela IBM e publicada em 1986, e a partir da, tornou-se linguagem padro dos bancos relacionais. Existem variaes de comandos entre cada SGDB, mas os comandos bsicos so normalmente funcionais em todos eles.

Comandos de Manipulao de Dados


Os comandos que manipulam dados, so muito usados e necessrios ao nosso conhecimento, so basicamente 4: Select, Update, Insert e Delete. Estes comandos no so Case-Sensitive, ou seja, no precisam considerar maisculos e minsculos. Select Este comando, faz a seleo de dados, ou seja, passa-se o select para o SQL Server e ele retorna com os dados pedidos em formato bidirecional (tabela). A sintaxe deste comando: Select campos From tabela Where expresso Order By campos Select o comando aplicado. No item campos listamos separados por vrgula cada campo que desejamos que seja trazido no retorno. A palavra From obrigatria (de, vindo de). Tabela o nome da tabela no banco de dados que se deseja o retorno. Por exemplo, aplicando no Service o comando: Select CodCliente, Nome From Clientes

O service retornou o seguinte resultado:

como se tivesse sido dito ao SQL, selecione o CodCliente e o Nome da tabela Clientes. O nome dos campos pode ser substitudo pelo coringa * (todos), ao utilizar o * significa que voc deseja que todos os campos da tabela sejam retornados. muito til, principalmente quando no se lembra o nome dos campos que se deseja visualizar. Exemplo: Select * From Clientes Com o comando acima, todos os campos de todos os registros da tabela clientes sero mostrados. O problema o tempo para retornar os dados, caso voc execute um Select * From NotasFiscaisSada, para descobrir o nome dos campos que compe a tabela de notas fiscais de sada, voc teria que esperar muito tempo, at que o SQL consiga retonar todos os itens, visto o tamanho da tabela. Para isso, um macete a clusula TOP. Caso altere o comando para Select Top 1 * From NotasFiscaisSadas, o retorno imediato, pois apenas a primeira linha encontrada pela SQL vai ser retornada, isso pela insero do Top 1, caso voc quizesse os 10 primeiros bastaria usar Top 10 em vez de Top 1. Desta forma, a fim de descobrir o nome dos campos, conseguimos fazer rapidamente. Para se localizar um dado especfico numa tabela, convm usarmos a clusula Where. Onde, em ingls, ela permite fazer com que os dados que sero exibidos sejam filtrados, ou seja, sejam retornados apenas registros que satisfazem uma condio. Exemplo, por um motivo qualquer preciso listar todos as contas a receber de um determinado cliente, no caso o cliente cdigo 1015. Executando Select Top 1 * From ContasReceber, consigo verificar os campos e descobrir que o campo Cliente guarda o cdigo do cliente para o qual pertence a duplicata. Ento passo o comando: Select * From ContasReceber Where Cliente=1015 Ou seja, aps o Where foi inserido uma expresso que mostra o resultado que desejamento, queramos todas os campos dos registros da tabela ContasReceber Onde o campo Cliente fosse igual a 1015. Na clusula Where, sempre vamos ter testes lgicos, e os dados retornados sempre tero as condies impostas como verdadeiras. Nos testes lgicos, podemos usar os seguintes caracteres: > maior do que < menor do que >= maior ou igual a <= menor ou igual a <> diferente de = igual a Caso eu deseje por exemplo listar todas as contas a receber que no foram quitadas ainda, executa-se o seguinte comando: Select * From ContasReceber Where Saldo>0 Neste caso estou pedindo ao SQL todos os registros onde o saldo a pagar est acima de 0. possvel usar mais de uma condio, bastando usar o conjuntivo And (e em ingls). Exemplo, no comando: Select * From ContasReceber Where Cliente=1015 And Saldo>0 estou pedindo que sejam retornadas todas as duplicatas do cliente cdigo 1015 que tenha saldo maior do que 0, ou seja, ainda no esteja quitada. possvel usar quantos And forem necessrios, ou seja, possvel impor diversas condies. Existe tambm na clusula Where o disjuntivo Or (ou em ingls).

No comando Select * From ContasReceber Where Cliente=1015 Or Cliente=289 dito ao SQL Server que retorne todas as contas a receber do cliente 1015 ou do cliente 289, ou seja, se for um ou outro cliente, os dados sero retornados. Agora citando o seguinte exemplo, tenho 3 empresas (101,102,103) e preciso que sejam retornados todos as contas a receber no quitadas do cliente 1015 das empresas 101 e 102, com excesso da 103. Ento aplicamos: Select * From ContasReceber Where Cliente=1015 And Saldo>0 And Empresa=101 Or Empresa=102 E o comando funciona? Infelizmente no. Foi criado no comando uma contradio, o SQL vai retornar os registros do contasreceber onde o cliente foi o 1015, com saldo maior que 0 e empresa 101 at a legal, mas agora, ou empresa = 102, faz com que todos os ContasReceber da empresa 102 venham junto, e no somente do nosso cliente em questo. O correto desse comando seria: Select * From ContasReceber Where Cliente=1015 And Saldo>0 And (Empresa=101 Or Empresa=102) Os parnteses mudam tudo, por fazem entender que o cliente deve ser o 1015, o saldo maior do que 0 e, a empresa pode ser 101 ou 102. Neste caso, o SQL leva princpios de prioridade matemtica, onde: 2+5*4=22 e (2+5)*4=28. Outro tipo de filtro a clusula Like. Caso voc precise listar todos os clientes com nome inicial de Cezar, e com qualquer final, utilizamos o seguinte comando: Select * From Clientes Where Nome Like Cezar% O operador % representa uma coisa parecida com o * nos campos, mostra ao SQL que qualquer final aps o nome Cezar ser mostrado. Caso um cliente tenha o nome de Julio Cezar, no ser mostrado, pois no inicia com Cezar. Caso queira listar todos os clientes com sobrenome Silva, aplicariamos o seguinte comando: Select * From Clientes Where Nome Like %Silva Caso queira que retorne todos os clientes com a palavra Silva no nome, poderia usar o seguinte comando: Select * From Clientes Nome Like %Silva% A clusula Order By serve para ordenar os registros conforme os campos passados. Exemplo: Select * From Clientes Order By Nome Neste caso os clientes seriam listados por ordem alfabtica do campo Nome, para inverter a ordem, basta usar o item Desc. Select * From Clientes Order By Nome Desc faz com que sejam retornados os clientes ordenados do Z para o A. Pode-se ordenar por mais de um campo, bastando separar por vrgula. Exemplo: Select * From Clientes Where FaturaLote<>0 Order By Empresa, Desc Neste caso foram chamados todos os clientes com faturamento em lote ativado, ordenados pela empresa e a cada empresa, ordenados alfabeticamente por Nome. O select no modifica nem faz qualquer ao com os dados, portanto, pode-se testar sem problema algum os comandos, a qualquer tempo. Update O comando Update serve para alterar dados gravados no banco de dados, muito til para consertar erros de gravao ou alterar dados em massa, facilitando manuteno de dados do sistema. Deve-se tomar cuidado com este comando, pois o mesmo modifica dados, e no existe confirmao do comando. A sintaxe: Update tabela Set campos Where expresso Update o comando. No item tabela informamos o nome da tabela que desejamos alterar os dados. Set uma expresso obrigatriado comando update. No item campos, informamos a atribuio de valores que desejamos fazer, podemos alterar mais de um campo ao mesmo tempo, bastando separar cada um por vrgula. Exemplo prtico: O cliente possuia uma conta no Banco do Brasil, forma de pagamento 26 e abriu uma conta no Sicredi, forma de pagamento 23, agora ele quer que todos os clientes que estavam com forma de pagamento 26 passem para o 23: Update Clientes Set FormaPagamento=23 Where FormaPagamento=26

Neste caso, a clusula Where faz com que somente os clientes com forma de pagamento 26 sejam atingidos, o Update pede que na tabela Clientes, a forma de pagamento seja setado, no caso mudado, para 23. Convm sempre testar com um Select os dados que retornam antes de usar o Update. Exemplo, no caso acima aplicar um Select * From Clientes Where FormaPagamento=26 faz com que possa se verificar se nos resultados da consulta esto realmente os itens que se deseja alterar. Delete O comando Delete responsvel por excluir dados gravados na tabela. Deve-se tomar muito cuidado com o comando, pois no existe nenhum procedimento que possa ser executado, afim de reaver os dados, a no ser a restaurao de um backup. No existe nenhuma confirmao na deleo. Delete From tabela Where expresso Se executar o comando Delete From Clientes, todos os clientes so excludos. No comando Delete, sempre execute um Select antes, para verificar se os dados retornados so realmente os que se deseja excluir. Desde que no se deseja realmente excluir todos os itens de uma tabela, sempre usar a clusula Where. Por exemplo, caso se deseja excluir o cliente cdigo 1015 atravs de comandos, execute: Select * From Clientes Where CodCliente=1015 Caso retorne exatamente o cadastro desejado: Delete From Clientes Where CodCliente=1015 Perceba que o comando praticamente o mesmo, porm, tira-se o coringa *. Insert O Insert um comando que insere dados na tabela, cada Insert pode criar apenas um registro na tabela, o comando se torna extenso textualmente dependendo dos dados a inserir. A sintaxe: Insert Into tabela (campos) Values (valores) Por exemplo, criamos um cliente com um cdigo em especfico: Insert Into Clientes (CodCliente, Nome) Values (1015, Teste) Estamos com este comando criando o cliente cdigo 1015 com o nome Teste. No recomenda-se utilizar o Insert Into, mas sim usar o sistema para gravar novos dados, pois podem haver campos que devem ser preenchidos, que podem ser ignorados no Insert, desta forma, pode gerar-se erros em outros procedimentos.

Comandos de Alterao de Estruturas


Existem comandos que alteram, criam e excluem tabelas ou campos, ou outros objetos de banco de dados, deve-se tomar cuidado com estes comandos, pois mechem na estrutura dos dados, e podem gerar problemas. Convm, aplicar estes comandos apenas sobre a orientao do desenvolvimento. Pontanto, somente apresentaremos a estrutura destes comandos. So os comandos Create, Alter e Drop. O Create cria tabelas, consultas, ndices etc. Um exemplo de Create para criar uma tabela: Create Table Clientes (CodCliente Numeric, Nome nvarchar(50)) Este comando criaria uma tabela clientes com os campos de CodCliente numrico e o campo Nome formato texto de limite de 50 letras. O Create pode criar outros objetos, por exemplo, o Create View, Create Index criam vises e ndices. Exemplos destes comandos podem ser vistos no arquivo AtuBanco.sql, que o sistema roda a fim de atualizar as estruturas do banco. O Alter modifica itens, por exemplo: Alter Table Clientes Add Fone nvarchar(20) -> Inclui campo Fone com 20 letras de limite na tabela Clientes Alter Table Clientes Drop Column Fone -> Exclui o campo fone criado O comando Drop excluir tabelas e at mesmo o banco de dados Drop Table Clientes -> Elimina a tabela clientes Drop DataBase Service -> Elimina o banco de dados do Service (No executar) Finalizando

Cuidado!!!

Onde estes comandos podem ser executados? Atravs do Query Analizer, entrando em Dos, e executando o OSQL, isto se estiver no servidor ou numa mquina com SQL. Em outros casos utilizar o item Comandos do SQL Server nos Utilitrios do menu Suporte. Existem outros comandos SQL, que attacham, desattacham um banco, criam e descompactam backups, mas focamos nesta apostila os comandos bsicos. Atachando um Banco Service: Exec sp_attach_db @dbName=Service, @filename1=C:\Service\Service.mdf O comando Exec executa um procedimento gravado no banco, no caso o procedimento invocado o sp_attach_db que est nativamente gravado no SQL, os parmetros so @dbName, que o nome que o banco vai utilizar, e o @filename1, que mostra onde est o arquivo .mdf do Service. Os parmetros so passados entre aspas por motivo de serem textos (strings).