<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo para SQL - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/tag/sql/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/tag/sql/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Fri, 27 Sep 2024 11:26:10 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Funções de Manipulação de Strings no SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 27 Sep 2024 11:22:05 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20294</guid>

					<description><![CDATA[<p>Manipulação de Strings no SQL Server A Manipulação de Strings (cadeias de caracteres) é uma tarefa trivial em bancos de dados e programação em geral. Tarefas como contar caracteres de uma string, converter letras de maiúsculas para minúsculas e vice-versa, obter partes de uma palavra ou frase, limpar caracteres indesejados e diversas outras são realizadas de forma corriqueira para tratar os dados que são armazenados e consultados em bancos de dados. Os SGBDs possuem, normalmente, diversas funções internas que permitem realizar essas tarefas, e o Microsoft SQL Server possui um bom conjunto de funções de manipulação de strings disponível. Neste artigo, veremos algumas das funções para manipular caracteres mais comuns presentes no SQL Server, com suas sintaxes, aplicações e exemplos práticos de uso. Funções de Manipulação de Strings no SQL Server As funções que serão vistas nesse artigo são as seguintes: Função LEN Função LOWER Função UPPER Função LTRIM Função RTRIM Função TRIM Função LEFT Função RIGHT Função REPLACE Função SUBSTRING Função CONCAT Função LEN A função LEN, do inglês &#8220;length&#8221; (&#8220;comprimento&#8221;), é uma das funções de manipulação de strings no SQL Server mais utilizadas, sendo empregada para retornar o número de caracteres de uma string, ou seja, seu comprimento. [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/">Funções de Manipulação de Strings no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Manipulação de Strings no SQL Server</h1>
<p>A Manipulação de Strings (cadeias de caracteres) é uma tarefa trivial em <a href="https://www.bosontreinamentos.com.br/category/bancos-de-dados/">bancos de dados</a> e programação em geral. Tarefas como contar caracteres de uma string, converter letras de maiúsculas para minúsculas e vice-versa, obter partes de uma palavra ou frase, limpar caracteres indesejados e diversas outras são realizadas de forma corriqueira para tratar os dados que são armazenados e consultados em bancos de dados.</p>
<p>Os SGBDs possuem, normalmente, diversas funções internas que permitem realizar essas tarefas, e o Microsoft SQL Server possui um bom conjunto de funções de manipulação de strings disponível.</p>
<p>Neste artigo, veremos algumas das funções para manipular caracteres mais comuns presentes no SQL Server, com suas sintaxes, aplicações e exemplos práticos de uso.</p>
<h2>Funções de Manipulação de Strings no SQL Server</h2>
<p>As funções que serão vistas nesse artigo são as seguintes:</p>
<ul>
<li><a href="#len">Função LEN</a></li>
<li><a href="#lower-right">Função LOWER</a></li>
<li><a href="#lower-right">Função UPPER</a></li>
<li><a href="#trim-rtrim-ltrim">Função LTRIM</a></li>
<li><a href="#trim-rtrim-ltrim">Função RTRIM</a></li>
<li><a href="#trim-rtrim-ltrim">Função TRIM</a></li>
<li><a href="#left-right">Função LEFT</a></li>
<li><a href="#left-right">Função RIGHT</a></li>
<li><a href="#replace">Função REPLACE</a></li>
<li><a href="#substring">Função SUBSTRING</a></li>
<li><a href="#concat">Função CONCAT</a></li>
</ul>
<h2 id="len">Função LEN</h2>
<div>A função LEN, do inglês &#8220;length&#8221; (&#8220;comprimento&#8221;), é uma das funções de manipulação de strings no SQL Server mais utilizadas, sendo empregada para retornar o número de caracteres de uma string, ou seja, seu comprimento. Geralmente a usamos em consultas SQL para validar e manipular dados textuais, como verificar o número de caracteres em uma senha ou em um código.</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #800080;"><strong>LEN(<em>expressão</em>)</strong></span></pre>
<div>Onde <em>expressão</em> é a string ou coluna de texto cujo comprimento se deseja calcular.</div>
<div> </div>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Contar o número de caracteres nos títulos de livros</strong></div>
<div> </div>
<div>Este exemplo consulta a tabela Livro e retorna os nomes dos livros juntamente com a contagem de caracteres de cada título.</div>
<pre><strong>SELECT NomeLivro, LEN(NomeLivro) 'Tamanho do Título'</strong>
<strong>FROM Livro;</strong></pre>
<div><strong>Exemplo 2: Validar o comprimento do ISBN13</strong></div>
<div> </div>
<div>O ISBN13 deve conter exatamente 13 caracteres. Podemos usar a função LEN para verificar se algum registro na tabela Livro possui um ISBN com um número incorreto de caracteres:</div>
<pre>SELECT NomeLivro, ISBN13, LEN(ISBN13) AS 'Tamanho do ISBN'
FROM Livro
WHERE LEN(ISBN13) &lt;&gt; 13;</pre>
<div>Essa consulta retornará todos os livros cujo campo ISBN13 não contém exatamente 13 caracteres, indicando assim possíveis erros de inserção.</div>
<div> </div>
<div>
<div><strong>Exemplo 3:  Qual livro tem o título mais curto?</strong></div>
<pre>SELECT Nome_Livro, LEN(Nome_Livro)  'Tamanho do Título'
FROM tbl_Livro
WHERE LEN(Nome_Livro) = (
    SELECT MIN(LEN(Nome_Livro))
    FROM tbl_Livro
);</pre>
</div>
<div>Serão retornados os nomes dos livros que possuam o título mais curto. Para isso, combinamos a função LEN com a <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/19-t-sql-funcoes-agregadas-sum-count-max-min-avg-sql-server/">função de agregação</a> MIN em uma subconsulta.</div>
<div> </div>
<div><strong>Exemplo 4: Ordenar livros pelo comprimento do título</strong></div>
<div> </div>
<div>Também podemos ordenar os resultados de uma consulta com base no comprimento de uma string, como no exemplo a seguir, que lista os livros com os títulos mais curtos primeiro.</div>
<pre>SELECT NomeLivro
FROM Livro
ORDER BY LEN(NomeLivro) ASC;</pre>
<div><strong>Exemplo 5:  Retornar as editoras cujos nomes tenham um tamanho fixo</strong></div>
<div> </div>
<div>Se quisermos localizar editoras cujo nome contém exatamente 10 caracteres, podemos usar a seguinte consulta:</div>
<pre>SELECT NomeEditora, LEN(NomeEditora) AS Tamanho_Nome
FROM Editora
WHERE LEN(NomeEditora) = 10;</pre>
<div>Esse tipo de análise pode ser útil para verificar padrões de nomenclatura ou para fins de organização.</div>
<div> </div>
<div><strong>Exemplo 6: Exibir autores com nomes longos</strong></div>
<div> </div>
<div>Podemos usar a função LEN para identificar autores que possuem nomes ou sobrenomes extensos.</div>
<pre>SELECT NomeAutor, SobrenomeAutor, LEN(NomeAutor) + LEN(SobrenomeAutor) AS 'Tamanho do Nome Completo'
FROM Autor
WHERE (LEN(NomeAutor) + LEN(SobrenomeAutor)) &gt; 20;</pre>
<div>Essa consulta retornará os autores cujo nome completo (nome + sobrenome) contém mais de 20 caracteres.</div>
<div> </div>
<h2 id="lower-right">Funções LOWER e UPPER</h2>
<div>As funções LOWER e UPPER permitem converter os caracteres de uma string para letras minúsculas e maiúsculas, respectivamente.</div>
<div> </div>
<div>Sintaxes</div>
<pre><span style="color: #800080;">LOWER(<em>expressão</em>)
UPPER(<em>expressão</em>)</span></pre>
<div>Onde <em>expressão</em> é o texto ou coluna de texto que se deseja transformar em minúsculas ou maiúsculas.</div>
<div> </div>
<div><strong>Exemplo 1: Converter nomes de livros para minúsculas</strong></div>
<div> </div>
<div>Este exemplo consulta a tabela Livro e retorna os títulos dos livros em letras minúsculas.</div>
<pre>SELECT NomeLivro, LOWER(NomeLivro) AS 'Nome Minúsculo'
FROM Livro;</pre>
<div>O resultado exibirá o nome original do livro ao lado de sua versão em minúsculas, útil quando se deseja padronizar a exibição dos títulos.</div>
<div> </div>
<div><strong>Exemplo 2: Comparar títulos de livros sem distinção de maiúsculas/minúsculas</strong></div>
<div> </div>
<div>Para verificar a existência de um livro independentemente do uso de maiúsculas ou minúsculas, pode-se utilizar LOWER na condição de uma consulta.</div>
<pre>SELECT NomeLivro
FROM Livro
WHERE LOWER(NomeLivro) = 'a arte da eletrônica';</pre>
<div>Essa consulta permitirá encontrar o livro &#8220;A Arte da Eletrônica&#8221; mesmo que seu título esteja registrado com diferentes combinações de maiúsculas e minúsculas.</div>
<div> </div>
<div><strong>Exemplo 3: Padronizar assuntos em letras maiúsculas</strong></div>
<div> </div>
<div>Se os registros na tabela Assunto contiverem uma mistura de letras maiúsculas e minúsculas, podemos usar UPPER para padronizar a exibição desses dados.</div>
<pre>SELECT UPPER(NomeAssunto) AS Assunto
FROM Assunto;</pre>
<div>Essa prática pode facilitar a leitura e garantir que os dados sejam exibidos de forma uniforme em relatórios ou interfaces.</div>
<div> </div>
<div><strong>Exemplo 4: Inserir novos registros padronizados</strong></div>
<div> </div>
<div>Ao inserir novos registros em uma tabela, podemos usar UPPER ou LOWER para garantir que o valor seja armazenado no banco de dados de forma padronizada.</div>
<div> </div>
<div>Exemplo de inserção de um novo autor com o nome e sobrenome convertidos para letras maiúsculas:</div>
<pre>INSERT INTO Autor (NomeAutor, SobrenomeAutor)
VALUES (UPPER('Fábio'), UPPER('dos Reis'));</pre>
<div>Essa técnica pode ajudar a evitar discrepâncias no banco de dados, onde o mesmo nome pode ser inserido com diferentes formas de capitalização.</div>
<div> </div>
<div><strong>Exemplo 5: Converter os nomes e sobrenomes de autores para maiúsculas</strong></div>
<div> </div>
<div>Neste exemplo, podemos exibir os nomes completos dos autores (nome e sobrenome) em letras maiúsculas para um formato mais padronizado.</div>
<pre>SELECT NomeAutor, SobrenomeAutor,
    UPPER(NomeAutor) AS NomeMaiusculo,
    UPPER(SobrenomeAutor) AS SobrenomeMaiusculo
FROM Autor;</pre>
<div>Esse formato é útil quando se deseja uma apresentação visual consistente de dados textuais.</div>
<div> </div>
<h2 id="trim-rtrim-ltrim">Funções LTRIM, RTRIM e TRIM</h2>
<div>As funções LTRIM, RTRIM e TRIM são usadas para remover espaços em branco (ou caracteres específicos) no início, no final ou em ambos os lados de uma string. Úteis quando se deseja limpar ou padronizar dados textuais.</div>
<div> </div>
<div>Sintaxes</div>
<pre><span style="color: #800080;">LTRIM(expressão)</span>
<span style="color: #800080;">RTRIM(expressão)</span>
<span style="color: #800080;">TRIM([caracteres FROM] expressão)</span></pre>
<div>Onde:</div>
<ul>
<li><strong>expressão</strong>: string que será modificada.</li>
<li><strong>caracteres</strong>: Caracteres que se deseja remover. Se omitido, remove espaços em branco.</li>
</ul>
<div> </div>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Remover espaços em branco no início dos nomes de livros</strong></div>
<div> </div>
<div>Se houver registros na tabela Livro com espaços em branco antes do nome do livro, podemos usar LTRIM em uma consulta para remover esses espaços ao exibi-los.</div>
<pre>SELECT NomeLivro, LTRIM(NomeLivro) 'Nome Ajustado'
FROM Livro;</pre>
<div>Neste exemplo, a consulta retornará o nome original do livro e sua versão sem os espaços em branco no início. Isso é útil para garantir que os dados sejam exibidos de forma consistente.</div>
<div> </div>
<div>Exemplo 2: Remover espaços antes do sobrenome dos autores</div>
<div>Se os sobrenomes dos autores contiverem espaços em branco indesejados no início, podemos usar LTRIM para remover esses espaços.</div>
<div> </div>
<div>SELECT SobrenomeAutor, LTRIM(SobrenomeAutor) AS SobrenomeAjustado</div>
<div>FROM Autor;</div>
<div> </div>
<div>Isso garante que os sobrenomes sejam exibidos corretamente, sem espaços extras no início.</div>
<div> </div>
<div><strong>Exemplo 2: Remover espaços em branco no final dos nomes de editoras</strong></div>
<div> </div>
<div>Caso algum nome de editora na tabela Editora tenha sido registrado com espaços em branco no final, RTRIM pode ser usado para corrigir isso.</div>
<pre>SELECT NomeEditora, RTRIM(NomeEditora) AS 'Nome da Editora Ajustado'
FROM Editora;</pre>
<div>Neste exemplo, o nome da editora será retornado sem os espaços extras no final, garantindo que os dados estejam corretamente formatados.</div>
<div> </div>
<div>Exemplo 5: Remover espaços em branco no início e no final dos títulos de livros ao mesmo tempo</div>
<div> </div>
<div>Para garantir que os títulos dos livros na tabela Livro estejam sem espaços em branco no início e no final em ua consulta, podemos usar a função TRIM.</div>
<pre>SELECT NomeLivro, TRIM(NomeLivro) AS NomeLivroAjustado
FROM Livro;</pre>
<div>Isso remove qualquer espaço em branco extra no início e no final do título dos livros, garantindo que os dados estejam limpos.</div>
<div> </div>
<div><strong>Exemplo 3: Remover caracteres específicos de uma string</strong></div>
<div> </div>
<div>A função TRIM também pode ser usada para remover outros caracteres além dos espaços em branco. Suponha que, por algum motivo, os títulos de alguns livros foram armazenados com um caractere de asterisco (*) no início e no final. Podemos usar TRIM para remover esses caracteres.</div>
<pre>SELECT NomeLivro, TRIM('*' FROM NomeLivro) AS NomeLivroLimpo
FROM Livro;</pre>
<div>Esse exemplo remove os asteriscos do início e do final dos nomes dos livros, garantindo que apenas o título adequado seja exibido.</div>
<div> </div>
<div><strong>Exemplo 4: Atualizar registros para remover espaços indesejados</strong></div>
<div> </div>
<div>Ao identificar espaços em branco indesejados nos dados, podemos usar as funções LTRIM, RTRIM e TRIM em uma cláusula UPDATE para corrigir permanentemente os valores no banco de dados.</div>
<div> </div>
<div>Por exemplo, para remover espaços no início e no final dos nomes das editoras cadastradas, alterando esses dados na tabela, podemos usar TRIM:</div>
<pre>UPDATE Editora
SET NomeEditora = TRIM(NomeEditora);</pre>
<div>Esse comando atualiza todos os registros da tabela Editora, removendo qualquer espaço extra no início ou no final dos nomes. Note que não usamos cláusula WHERE aqui, pois queremos que a atualização seja aplicada a todas as linhas da tabela.</div>
<div> </div>
<div><strong>Exemplo 5: Inserir dados sem espaços indesejados</strong></div>
<div> </div>
<div>Ao inserir novos dados, também é possível utilizar TRIM para garantir que os valores sejam armazenados corretamente. Por exemplo, ao cadastrar um novo autor, podemos garantir que o nome e sobrenome sejam armazenados sem espaços indesejados porventura digitados pelo usuário:</div>
<pre>INSERT INTO Autor (NomeAutor, SobrenomeAutor)
VALUES (TRIM(' Fábio '), TRIM(' dos Reis '));</pre>
<div>Essa técnica impede que valores com espaços indesejados sejam armazenados no banco de dados.</div>
<div> </div>
<h2 id="left-right">Funções LEFT e RIGHT</h2>
<div>As funções LEFT e RIGHT são usadas para extrair partes de uma string, com base no número de caracteres contados a partir da esquerda ou da direita, respectivamente.</div>
<div> </div>
<div>A função LEFT retorna os primeiros &#8220;n&#8221; caracteres de uma string, a partir da esquerda. Já a função RIGHT retorna os últimos &#8220;n&#8221; caracteres de uma string, contados a partir da direita.</div>
<div> </div>
<div>Sintaxes:</div>
<pre><span style="color: #800080;">LEFT(string, número_de_caracteres)</span></pre>
<div>onde:</div>
<ul>
<li><strong>string</strong>: A string original da qual se deseja extrair os caracteres.</li>
<li><strong>número_de_caracteres</strong>: O número de caracteres a ser extraído, começando pela esquerda.</li>
</ul>
<pre><span style="color: #800080;">RIGHT(string, número_de_caracteres)</span></pre>
<div><strong>Exemplo 1: Extrair os 4 últimos caracteres do ISBN com RIGHT</strong></div>
<div> </div>
<div>Em nosso banco de dados, a tabela Livro contém a coluna ISBN13, que armazena o número ISBN dos livros. Podemos querer extrair os últimos 4 caracteres do ISBN para identificar o título e dígito verificador da obra.</div>
<pre>SELECT ISBN13,
    RIGHT(ISBN13, 4) AS 'Título e DV'
FROM Livro;</pre>
<div><strong>Exemplo 2: Extrair as iniciais dos nomes dos autores</strong></div>
<div> </div>
<div>Na tabela Autor, temos os nomes armazenados na coluna NomeAutor. Caso queiramos extrair os primeiros 2 caracteres dos nomes dos autores, podemos usar a função LEFT.</div>
<pre>SELECT NomeAutor,
    LEFT(NomeAutor, 2) AS 'Iniciais Autor'
FROM Autor;</pre>
<div><strong>Exemplo 3: Extrair o ano de publicação com LEFT</strong></div>
<div> </div>
<div>Caso a data de publicação dos livros esteja armazenada na coluna DataPub no formato YYYY-MM-DD, podemos usar a função LEFT para extrair o ano da publicação (os 4 primeiros dígitos internamente).</div>
<pre>SELECT NomeLivro,
    LEFT(CAST(DataPub AS VARCHAR), 4) AS AnoPublicacao
FROM Livro;</pre>
<div>Na verdade o ideal, neste caso, seria usar uma função de manipulação de datas, que é mais adequado.</div>
<div> </div>
<h2 id="replace">Função REPLACE</h2>
<div>A função REPLACE é usada para substituir todas as ocorrências de uma substring por outra dentro de uma string. É útil para realizar transformações em dados de texto.</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #993366;">REPLACE(string_original, substring_antiga, substring_nova)</span></pre>
<div>onde:</div>
<ul>
<li><strong>string_original:</strong> A string na qual a substituição será realizada.</li>
<li><strong>substring_antiga</strong>: O texto que será substituído.</li>
<li><strong>substring_nova</strong>: O novo texto que substituirá a substring antiga.</li>
</ul>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Trocar todas as ocorrências de &#8220;Server 2010&#8221; por &#8220;Server 2020&#8221; nos nomes dos livros</strong></div>
<pre><strong>UPDATE Livro</strong>
<strong>SET NomeLivro = REPLACE(NomeLivro, '2010', '2020')</strong>
<strong>WHERE NomeLivro LIKE '%Server 2010%';</strong>
<span style="color: #339966;"><strong>-- Teste:</strong></span>
<strong>SELECT * FROM Livro;</strong></pre>
<div><strong>Exemplo 2: Remover traços do ISBN dos livros</strong></div>
<div> </div>
<div>Se os números de ISBN dos livros forem inseridos com traços (por exemplo, 978-85-254-0417-9), pode ser necessário removê-los para padronizar o formato. Podemos usar a função REPLACE para remover os traços.</div>
<div>
<pre>UPDATE Livro
SET ISBN13 = REPLACE(ISBN13, '-', '')
WHERE ISBN13 LIKE '%-%';</pre>
</div>
<div>Neste caso, mandamos substituir os traços por nada, denotado pelas aspas simples sem conteúdo (nem mesmo um espaço em branco) no terceiro parâmetro passado à função.</div>
<div> </div>
<h2 id="substring">Função SUBSTRING</h2>
<div>A função SUBSTRING é utilizada para extrair uma parte de uma string a partir de uma posição inicial e com um comprimento específico. Permite selecionar trechos de texto dentro de colunas de tipos de caracteres, como VARCHAR, CHAR, TEXT</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #800080;">SUBSTRING(expressão, início, comprimento)</span></pre>
<div>onde:</div>
<ul>
<li><strong><em>expressão</em>:</strong> A expressão de string ou a coluna da qual se deseja extrair uma parte.</li>
<li><strong><em>início</em></strong>: A posição inicial (1 baseada) da extração.</li>
<li><strong><em>comprimento</em></strong>: O número de caracteres a serem extraídos.</li>
</ul>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Extrair os três primeiros caracteres de um título de livro</strong></div>
<div> </div>
<div>Suponha que queiramos extrair os três primeiros caracteres da coluna NomeLivro da tabela Livro. Esta operação pode ser útil para criar códigos ou siglas a partir dos títulos dos livros.</div>
<pre>SELECT NomeLivro, SUBSTRING(NomeLivro, 1, 3) AS SiglaLivro
FROM Livro;</pre>
<div><strong>Exemplo 2: Alterar nomes das editoras para que iniciem com uma letra maiúscula</strong></div>
<div> </div>
<div>Primeiramente vamos colocar os nomes das editoras em letras maiúsculas:</div>
<pre>UPDATE Editora
SET NomeEditora = UPPER(NomeEditora);

SELECT * FROM Editora;</pre>
<div>Agora vamos alterar os nomes das editoras para que apenas iniciem com uma letra maiúscula, com o restante do nome em minúsculas.</div>
<pre>UPDATE Editora
SET NomeEditora = UPPER(LEFT(NomeEditora, 1)) + LOWER(SUBSTRING(NomeEditora, 2, LEN(NomeEditora)))
WHERE NomeEditora IS NOT NULL;</pre>
<div><strong>3. Extrair o ano de publicação a partir da coluna DataPub</strong></div>
<div> </div>
<div>No caso da coluna DataPub que armazena a data de publicação dos livros no formato YYYY-MM-DD, pode-se usar a função SUBSTRING para extrair o ano diretamente a partir da string da data. Vamos considerar que a coluna DataPub seja uma VARCHAR.</div>
<pre>SELECT NomeLivro, DataPub, SUBSTRING(DataPub, 1, 4) AS AnoPublicacao
FROM Livro;</pre>
<div>Uma outra alternativa para executar esta tarefa é usar funções de manipulação de <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/tipos-de-data-e-hora-no-sql-server/">data e hora</a>, que possuem recursos mais adequados para o tratamento deste tipo de dado.</div>
<div> </div>
<h2 id="concat">Função CONCAT</h2>
<div>Uma das funções de manipulação de strings mais usadas no SQL Server, a função CONCAT permite concatenar (unir) duas ou mais strings em uma única string. Útil quando precisamos combinar dados de diferentes colunas ou acrescentar textos adicionais para formar uma nova informação.</div>
<div> </div>
<div>Esta função aceita múltiplos parâmetros, as strings a serem unidas. O SQL Server converte automaticamente os valores não strings em texto</div>
<div> </div>
<div>Sintaxe</div>
<pre><span style="color: #800080;">CONCAT(valor1, valor2, valor3, ...)</span></pre>
<div>onde:</div>
<ul>
<li><em><strong>valor1, valor2, &#8230;</strong></em>: Valores que serão concatenados. Podem ser colunas, literais ou expressões.</li>
</ul>
<div>Exemplos</div>
<div> </div>
<div><strong>Exemplo 1: Concatenação simples de strings.</strong></div>
<pre>SELECT CONCAT('Fábio ', 'dos Reis') AS 'Nome Cliente';</pre>
<div><strong>Exemplo 2: Concatenar nomes e sobrenomes dos autores</strong></div>
<div> </div>
<div>A tabela Autor possui as colunas NomeAutor e SobrenomeAutor, que armazenam, respectivamente, o nome e o sobrenome dos autores. Para exibir o nome completo, podemos concatenar essas duas colunas.</div>
<pre>SELECT CONCAT(NomeAutor, ' ', SobrenomeAutor) AS 'Nome Completo do Autor'
FROM Autor;</pre>
<div><strong>Exemplo 3: Concatenar ISBN e Nome do Livro</strong></div>
<div> </div>
<div>Na tabela Livro, podemos querer criar uma coluna que mostre tanto o nome do livro quanto o número ISBN13 em uma única string, para facilitar a identificação.</div>
<pre>SELECT NomeLivro,
    ISBN13,
    CONCAT(NomeLivro, ' (ISBN: ', ISBN13, ')') AS LivroComISBN
FROM Livro;</pre>
<div><strong>Exemplo 4: Concatenar Data de Publicação Formatada</strong></div>
<div> </div>
<div>Em alguns casos, podemos querer exibir a data de publicação de um livro com um formato específico. Usando CONCAT, é possível combinar a data com outras informações para gerar um texto descritivo.</div>
<pre>SELECT NomeLivro,
    DataPub,
    CONCAT('O livro "', NomeLivro, '" foi publicado em ', DataPub) AS DescricaoPublicacao
FROM Livro;</pre>
<h3>Conclusão</h3>
<div>Neste artigo estudamos as <a href="https://learn.microsoft.com/en-us/sql/t-sql/functions/string-functions-transact-sql?view=sql-server-ver16" target="_blank" rel="noopener">funções para manipulação de strings</a> mais comuns no SQL Server, incluindo suas sintaxes e alguns exemplos de uso de cada uma delas. O SQL Server oferece uma grande quantidade de funções para a realização de diversas tarefas, além da manipulação de strings, que incluem cálculos numéricos, manipulação temporal (data e hora), funções administrativas, e muitas outras que estudaremos nos próximos artigos.</div>
<div> </div>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/">Funções de Manipulação de Strings no SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/funcoes-de-manipulacao-de-strings-no-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Procedimentos Armazenados em PostgreSQL (Stored Procedures)</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/procedimentos-armazenados-em-postgresql-stored-procedures/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/procedimentos-armazenados-em-postgresql-stored-procedures/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 03 Sep 2024 14:56:25 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18799</guid>

					<description><![CDATA[<p>Procedimentos Armazenados em PostgreSQL (Stored Procedures) Procedimentos armazenados são uma forma de armazenar a lógica do banco de dados no lado do servidor e podem ser executados por vários clientes. Eles são uma ferramenta muito útil para administradores e programadores de banco de dados, pois permitem encapsular a lógica complexa em uma única unidade chamável, reduzindo o código duplicado, aumentando a segurança e melhorando o desempenho. Um procedimento armazenado no PostgreSQL é um bloco nomeado de instruções PL/pgSQL que podem ser executadas com um único comando. A sintaxe para criar um procedimento armazenado no PostgreSQL é a seguinte: CREATE [OR REPLACE PROCEDURE] nome_procedimento(arg1 tipo_dado1, arg2 tipo_dado2, ...) RETURNS tipo_dado_retorno LANGUAGE plpgsql AS $$ DECLARE -- declaração de variáveis locais, se houver BEGIN -- declarações PL/pgSQL END; $$; Onde: nome_procedimento é o nome do procedimento armazenado arg1, arg2, etc. são os parâmetros do procedimento armazenado tipo_dado1, tipo_dado2, etc. são os tipos de dados dos parâmetros tipo_dado_retorno é o tipo de dados do valor de retorno e a seção DECLARE é usada para declarar variáveis locais, se necessário. A lógica real do procedimento armazenado é escrita dentro de blocos BEGIN e END, usando instruções da linguagem PL/pgSQL. A cláusula LANGUAGE especifica o [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/procedimentos-armazenados-em-postgresql-stored-procedures/">Procedimentos Armazenados em PostgreSQL (Stored Procedures)</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Procedimentos Armazenados em PostgreSQL (Stored Procedures)</h2>
<p>Procedimentos armazenados são uma forma de armazenar a lógica do banco de dados no lado do servidor e podem ser executados por vários clientes. Eles são uma ferramenta muito útil para administradores e programadores de banco de dados, pois permitem encapsular a lógica complexa em uma única unidade chamável, reduzindo o código duplicado, aumentando a segurança e melhorando o desempenho.</p>
<p>Um procedimento armazenado no <a href="https://www.bosontreinamentos.com.br/curso-completo-de-postgresql/">PostgreSQL</a> é um bloco nomeado de instruções PL/pgSQL que podem ser executadas com um único comando. A sintaxe para criar um procedimento armazenado no PostgreSQL é a seguinte:</p>
<pre><span style="color: #800080;"><strong>CREATE [OR REPLACE PROCEDURE] nome_procedimento(arg1 tipo_dado1, arg2 tipo_dado2, ...)</strong></span>
<span style="color: #800080;"><strong>RETURNS tipo_dado_retorno</strong></span>
<span style="color: #800080;"><strong>LANGUAGE plpgsql</strong></span>
<span style="color: #800080;"><strong>AS $$</strong></span>
<span style="color: #800080;"><strong>DECLARE</strong></span>
<span style="color: #339966;"><strong>-- declaração de variáveis locais, se houver</strong></span>
<span style="color: #800080;"><strong>BEGIN</strong></span>
<span style="color: #339966;"><strong>-- declarações PL/pgSQL</strong></span>
<span style="color: #800080;"><strong>END;</strong></span>
<span style="color: #800080;"><strong>$$;</strong></span></pre>
<p>Onde:</p>
<ul>
<li><strong>nome_procedimento</strong> é o nome do procedimento armazenado</li>
<li><strong>arg1, arg2, etc</strong>. são os parâmetros do procedimento armazenado</li>
<li><strong>tipo_dado1, tipo_dado2, etc</strong>. são os <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/tipos-de-dados-no-postgresql/">tipos de dados</a> dos parâmetros</li>
<li><strong>tipo_dado_retorno</strong> é o tipo de dados do valor de retorno</li>
</ul>
<p>e a seção <strong>DECLARE</strong> é usada para declarar variáveis locais, se necessário. A lógica real do procedimento armazenado é escrita dentro de blocos BEGIN e END, usando instruções da linguagem <strong>PL/pgSQL</strong>.</p>
<p>A cláusula <strong>LANGUAGE</strong> especifica o idioma do procedimento armazenado, que é <em><strong>plpgsql</strong></em> neste caso.</p>
<h3>O símbolo $$</h3>
<p>O símbolo $$ usado na última linha de um procedimento PL/pgSQL é usado para definir o início e o fim do corpo do procedimento. É uma sintaxe especial usada para definir uma string literal que abrange várias linhas. Na prática, é possível usar qualquer string com essa finalidade, desde que não seja uma palavra reservada da linguagem.</p>
<p>Em um procedimento PL/pgSQL, o $$ é usado para envolver todo o corpo do procedimento, que inclui a declaração de variáveis, a definição de estruturas de controle e qualquer outra lógica que você queira implementar. O primeiro $$ marca o início do corpo do procedimento e o segundo $$ marca o fim do corpo do procedimento.</p>
<p>Outra opção é usar a estrutura &#8220;<strong>BEGIN ATOMIC</strong>&#8221; &#8230; &#8220;<strong>END</strong>&#8221; no lugar de &#8220;<strong>AS $$</strong>&#8220;.</p>
<h3><strong>O que é PL/pgSQL?</strong></h3>
<p>PL/pgSQL é uma linguagem procedural usada no PostgreSQL para escrever stored procedures, triggers e funções. É uma linguagem estruturada em blocos semelhante a outras linguagens procedurais, como PL/SQL no Oracle e T-SQL no Microsoft SQL Server. Essa linguagem fornece estruturas de controle, como instruções IF-THEN-ELSE, LOOP e EXIT, bem como a capacidade de declarar variáveis, realizar tratamento de exceções e usar cursores.</p>
<p>O PL/pgSQL oferece uma interface procedural de alto nível para o banco de dados que permite criar lógica de negócios complexa e automatizar as operações do banco de dados. Por exemplo, podemos usar PL/pgSQL para implementar regras de negócios, validar dados ou realizar cálculos complexos em dados armazenados no banco de dados.</p>
<p>Assim, podemos escrever lógica que pode ser facilmente testada e reutilizada, tornando-a uma maneira eficiente de gerenciar operações de banco de dados.</p>
<p>Trata-se de uma linguagem do lado do servidor, o que significa que o código é executado no servidor de banco de dados, e não no cliente. Isso o torna mais rápido e eficiente do que executar o script do lado do cliente, dentro de uma aplicação de usuário, além de fornecer melhor segurança para seus dados.</p>
<p>Outras opções de linguagens suportadas pelo Postgres incluem SQL padrão e linguagem C, além da possibilidade de trabalhar com extensões para outras linguagens como PL/Python, PL/Perl, etc.</p>
<p>A instrução <strong>LANGUAGE plpgsql</strong> é necessária ao criar procedimentos armazenados no PostgreSQL porque define a linguagem de programação que será usada para escrever o corpo do procedimento.</p>
<h3>Como executar o procedimento armazenado</h3>
<p>Podemos chamar um procedimento armazenado no PostgreSQL usando a seguinte sintaxe:</p>
<pre><span style="color: #800080;"><strong>CALL nome_procedimento(arg1_valor, arg2_valor, ...);</strong></span></pre>
<p>Aqui, arg1_valor, arg2_valor, etc. são os valores dos parâmetros passados para o procedimento armazenado. O resultado do procedimento armazenado será retornado na forma de uma tabela.</p>
<p>Vejamos agora alguns exemplos de criação e execução de procedimentos armazenados em PostgreSQL.</p>
<h3>Exemplo 01 &#8211; Inserir uma linha em uma tabela</h3>
<p>Procedimento armazenado em PostgreSQL (somente SQL) que insere uma nova linha em uma tabela, composta por três colunas: nome, sobrenome e idade:</p>
<p>Criar a tabela de teste:</p>
<pre><span style="color: #ff0000;"><strong>CREATE TABLE pessoas (</strong></span>
<span style="color: #ff0000;"><strong>    nome varchar(20),</strong></span>
<span style="color: #ff0000;"><strong>    sobrenome varchar(40),</strong></span>
<span style="color: #ff0000;"><strong>    idade smallint</strong></span>
<span style="color: #ff0000;"><strong>);</strong></span></pre>
<p>Vamos a um exemplo de procedimento armazenado em PL/pgSQL que insere uma nova linha em uma tabela com três colunas: nome, sobrenome e idade. O procedimento armazenado usa três parâmetros: p_nome, p_sobrenome e p_idade e insere esses valores na tabela.</p>
<pre><span style="color: #ff0000;"><strong>CREATE OR REPLACE PROCEDURE cadastra_pessoa(p_nome varchar(20), p_sobrenome varchar(40), p_idade smallint)</strong></span>
<span style="color: #ff0000;"><strong>  LANGUAGE plpgsql
AS $$
BEGIN</strong></span>
<span style="color: #ff0000;"><strong>    INSERT INTO pessoas (nome, sobrenome, idade)</strong></span>
<span style="color: #ff0000;"><strong>    VALUES (p_nome, p_sobrenome, p_idade);</strong></span>
<span style="color: #ff0000;"><strong>END</strong></span>
<span style="color: #ff0000;"><strong>$$</strong></span></pre>
<p><strong>Teste</strong></p>
<p>Para executar o procedimento armazenado, basta chamá-lo com os valores desejados como parâmetros, assim:</p>
<pre><span style="color: #ff0000;"><strong>CALL cadastra_pessoa('Fábio'::varchar, 'dos Reis'::varchar, 48::smallint);</strong></span></pre>
<p>E verificar se a tabela foi atualizada com o novo registro:</p>
<pre><span style="color: #ff0000;"><strong>SELECT * FROM pessoas;</strong></span></pre>
<p><img decoding="async" class="aligncenter wp-image-18802 size-full" title="Procedimento armazenado no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/02/postgresql-stored-procedure-2.png" alt="Procedimento armazenado no PostgreSQL" width="426" height="77" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/02/postgresql-stored-procedure-2.png 426w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/02/postgresql-stored-procedure-2-420x76.png 420w" sizes="(max-width: 426px) 100vw, 426px" /></p>
<h4>Especificar tipos de dados na chamada do procedimento</h4>
<p>Ao chamar um procedimento armazenado no PostgreSQL, a necessidade de especificar explicitamente os tipos de dados para os argumentos (por exemplo, &#8216;Fábio&#8217;::varchar) geralmente surge devido a questões de desambiguação e coerção de tipos.</p>
<p>Os principais motivos para especificar tipos de dados ao chamar um procedimento armazenado no PostgreSQL são os seguntes:</p>
<ol>
<li><strong>Desambiguação</strong>: Quando o PostgreSQL possui múltiplos procedimentos com o mesmo nome, mas com assinaturas diferentes (ou seja, com diferentes tipos de parâmetros ou números de parâmetros), ele precisa saber exatamente qual procedimento deve ser chamado. Especificar o tipo de dado ajuda o PostgreSQL a escolher a versão correta do procedimento.</li>
<li><strong>Coerção de Tipos</strong>: O PostgreSQL é uma linguagem fortemente tipada, o que significa que cada valor tem um tipo de dado associado, e algumas operações requerem tipos específicos. Quando se passa um literal (como &#8216;<strong>Fábio</strong>&#8216;), ele é inicialmente interpretado como um text, a menos que se indique explicitamente um tipo diferente, como o varchar.</li>
<li><strong>Prevenção de Erros de Tipagem</strong>: Quando o tipo de dado esperado pelo procedimento não corresponde ao tipo inferido pelo PostgreSQL, o banco de dados pode não ser capaz de fazer a coerção automaticamente, resultando em erros. Especificar o tipo assegura que o valor será tratado corretamente.</li>
</ol>
<h3>Exemplo 02 &#8211; Inserir um novo produto na tabela</h3>
<p>Vamos criar um procedimento armazenado que permita inserir um novo produto na tabela de produtos de nosso banco de dados.</p>
<pre><span style="color: #ff0000;"><strong>CREATE OR REPLACE PROCEDURE inserir_produto (</strong></span>
<span style="color: #ff0000;"><strong>    p_cod_produto INT,</strong></span>
<span style="color: #ff0000;"><strong>    p_nome_produto VARCHAR(30),</strong></span>
<span style="color: #ff0000;"><strong>    p_descricao TEXT,</strong></span>
<span style="color: #ff0000;"><strong>    p_preco NUMERIC,</strong></span>
<span style="color: #ff0000;"><strong>    p_qtde_estoque SMALLINT</strong></span>
<span style="color: #ff0000;"><strong>)</strong></span>
<span style="color: #ff0000;"><strong>language plpgsql</strong></span>
<span style="color: #ff0000;"><strong>AS $$</strong></span>
<span style="color: #ff0000;"><strong>BEGIN</strong></span>
<span style="color: #ff0000;"><strong>    INSERT INTO Produtos(cod_produto, nome_produto, descricao, preco, qtde_estoque)</strong></span>
<span style="color: #ff0000;"><strong>    VALUES (p_cod_produto, p_nome_produto, p_descricao, p_preco, p_qtde_estoque);</strong></span>
<span style="color: #ff0000;"><strong>    RAISE NOTICE 'Produto % cadastrado com sucesso.', p_nome_produto;</strong></span>
<span style="color: #ff0000;"><strong>END;</strong></span>
<span style="color: #ff0000;"><strong>$$;</strong></span></pre>
<p>A instrução <strong>RAISE NOTICE</strong> emite uma mensagem para o console confirmando a inserção do registro.</p>
<p>Para executar o procedimento:</p>
<pre><span style="color: #ff0000;"><strong>CALL inserir_produto(4,'Detergente'::varchar,'Detergente neutro 500 ml'::text, 2.35, 2::smallint);</strong></span></pre>
<p>E então podemos verificar se produto foi inserido corretamente realizando uma consulta simples ao banco de dados:</p>
<pre><span style="color: #ff0000;"><strong>SELECT * FROM Produtos;</strong></span></pre>
<h3>Exemplo 03 &#8211; Atualizar o preço de um produto.</h3>
<p>Este procedimento atualiza o preço de um produto específico, identificado pelo seu código de produto:</p>
<pre><span style="color: #ff0000;"><strong>CREATE OR REPLACE PROCEDURE atualizar_preco(</strong></span>
<span style="color: #ff0000;"><strong>    p_cod_produto INT,</strong></span>
<span style="color: #ff0000;"><strong>    p_novo_preco NUMERIC</strong></span>
<span style="color: #ff0000;"><strong>)</strong></span>
<span style="color: #ff0000;"><strong>LANGUAGE plpgsql</strong></span>
<span style="color: #ff0000;"><strong>AS $$</strong></span>
<span style="color: #ff0000;"><strong>BEGIN</strong></span>
<span style="color: #ff0000;"><strong>    UPDATE Produtos</strong></span>
<span style="color: #ff0000;"><strong>    SET preco = p_novo_preco</strong></span>
<span style="color: #ff0000;"><strong>    WHERE cod_produto = p_cod_produto;</strong></span>
<span style="color: #ff0000;"><strong>    RAISE NOTICE 'Preço do produto % atualizado para %', p_cod_produto, p_novo_preco;</strong></span>
<span style="color: #ff0000;"><strong>END;</strong></span>
<span style="color: #ff0000;"><strong>$$;</strong></span></pre>
<p>Para executar o procedimento:</p>
<pre><span style="color: #ff0000;"><strong>CALL atualizar_preco(1, 3.80);</strong></span></pre>
<p>E então podemos verificar se produto teve seu preço corretamente atualizado realizando novamente uma consulta ao banco de dados:</p>
<pre><span style="color: #ff0000;"><strong>SELECT * FROM Produtos;</strong></span></pre>
<h3>Exemplo 04 &#8211; Procedimento para consultar produtos com estoque baixo</h3>
<p>Este procedimento retorna todos os produtos com quantidade em estoque abaixo de um valor especificado na chamada da procedure.</p>
<pre><span style="color: #ff0000;"><strong>CREATE OR REPLACE PROCEDURE consultar_estoque_baixo (</strong></span>
<span style="color: #ff0000;"><strong>    p_limite_estoque INTEGER</strong></span>
<span style="color: #ff0000;"><strong>)</strong></span>
<span style="color: #ff0000;"><strong>LANGUAGE plpgsql</strong></span>
<span style="color: #ff0000;"><strong>AS $$</strong></span>
<span style="color: #ff0000;"><strong>DECLARE resultado RECORD;</strong></span>
<span style="color: #ff0000;"><strong>BEGIN</strong></span>
<span style="color: #ff0000;"><strong>    FOR resultado in</strong></span>
<span style="color: #ff0000;"><strong>        SELECT cod_produto, nome_produto, qtde_estoque</strong></span>
<span style="color: #ff0000;"><strong>        FROM Produtos</strong></span>
<span style="color: #ff0000;"><strong>        WHERE qtde_estoque &lt; p_limite_estoque</strong></span>
<span style="color: #ff0000;"><strong>    LOOP</strong></span>
<span style="color: #ff0000;"><strong>        RAISE NOTICE 'Produto: %, Estoque: % ', resultado.nome_produto, resultado.qtde_estoque;</strong></span>
<span style="color: #ff0000;"><strong>    END LOOP;</strong></span>
<span style="color: #ff0000;"><strong>END;</strong></span>
<span style="color: #ff0000;"><strong>$$;</strong></span></pre>
<p>Para executar o procedimento:</p>
<pre><strong><span style="color: #ff0000;">CALL consultar_estoque_baixo(3);</span></strong></pre>
<p>Aqui, consultamos todos os produtos cujo estoque está abaixo de 3 unidades.</p>
<p>Devemos notar alguns detalhes interessantes sobre a consulta realizada pelo procedimento armazenado deste exemplo:</p>
<h4>Destino dos dados</h4>
<p>Quando se usa a instrução SELECT em um procedimento armazenado no PostgreSQL, o resultado deve ser direcionado para algum lugar, como uma variável, uma tabela temporária, ou ser retornado ao chamador da função ou procedimento.</p>
<p>Caso contrário, o PostgreSQL gera a mensagem &#8220;consulta não tem destino para os dados resultantes&#8221; (no inglês: &#8220;<em>query has no destination for result data</em>&#8220;).</p>
<p>Se for necessário apenas exibir os resultados no console em um procedimento armazenado, sem retorná-los em uma consulta, podemos usar um loop para iterar sobre os resultados e então exibi-los com RAISE NOTICE.</p>
<h4>O tipo RECORD</h4>
<p>O tipo RECORD é um tipo de dado genérico no PL/pgSQL que pode acomodar uma linha de dados com colunas de diferentes tipos. Ao contrário de outros tipos de variáveis, que têm um tipo de dado específico (como INTEGER, VARCHAR, etc.), o RECORD pode armazenar qualquer linha inteira de resultado, independentemente de quantas colunas ou de quais tipos de dados essas colunas têm.</p>
<p>A instrução DECLARE r RECORD; em PL/pgSQL é usada para declarar uma variável de tipo RECORD.</p>
<p>Quando usamos o RECORD dentro de um loop FOR IN que itera sobre os resultados de uma consulta, o RECORD é automaticamente &#8220;preenchido&#8221; com os valores das colunas para cada linha retornada. Isso permite acessar os valores dessas colunas dentro do corpo do loop.</p>
<p>Além disso, uma vez que a linha é armazenada no RECORD, podemos acessar as colunas individuais usando a notação r.coluna, onde r é o nome da variável RECORD e coluna é o nome da coluna que desejamos acessar.</p>
<h3>Exemplo 05 &#8211; Inserir e atualizar valores no mesmo procedimento.</h3>
<p>Exemplo: criar um procedimento armazenado que insira um novo produto na tabela de produtos, ao mesmo tempo em que aplica um desconto percentual especificado a todos os produtos logo após.</p>
<pre><span style="color: #ff0000;"><strong>CREATE OR REPLACE PROCEDURE insere_atualiza (</strong></span><span style="color: #ff0000;"><strong>cod int, prod varchar(30), descr text, valor numeric, qtde smallint, desc_perc numeric)</strong></span>
<span style="color: #ff0000;"><strong>LANGUAGE plpgsql</strong></span>
<span style="color: #ff0000;"><strong>AS $$</strong></span>
<span style="color: #ff0000;"><strong>BEGIN</strong></span>
<span style="color: #ff0000;"><strong>    INSERT INTO produtos(cod_produto, nome_produto, descricao, preco, qtde_estoque)</strong></span>
<span style="color: #ff0000;"><strong>    VALUES (cod, prod, descr, valor, qtde);</strong></span>
<span style="color: #ff0000;"><strong>    UPDATE produtos SET preco = preco * (100 - desc_perc) / 100;</strong></span>
<span style="color: #ff0000;"><strong>END;</strong></span>
<span style="color: #ff0000;"><strong>$$;</strong></span></pre>
<p>Executar o procedimento:</p>
<pre><span style="color: #ff0000;"><strong>CALL insere_atualiza(6,'Alvejante'::varchar(30),'Alvejante de roupas'::text, 12.30, 12::smallint, 10);</strong></span></pre>
<p>Obs.: O tipo numeric geralmente não precisa ser informado (cast) na chamada do procedimento.</p>
<h2>Como excluir um procedimento armazenado</h2>
<p>Para excluir um procedimento armazenado no PostgreSQL devemos usar a declaração DROP PROCEDURE, como segue:</p>
<pre><span style="color: #800080;"><strong>DROP PROCEDURE nome_procedimento;</strong></span></pre>
<p>Por exemplo, para excluir o procedimento <strong><em>consultar_estoque_baixo</em></strong>:</p>
<pre><span style="color: #ff0000;"><strong>DROP PROCEDURE consultar_estoque_baixo;</strong></span></pre>
<p>Se houver mais de um procedimento armazenado como mesmo nome, mas com quantidade e tipos de parâmetros distintos (<strong>polimorfismo</strong>), devemos indicar os tipos de dados dos argumentos ao exclui-lo:</p>
<pre><span style="color: #ff0000;"><strong>DROP PROCEDURE insere_atualiza(int,varchar,text,numeric,smallint,numeric);</strong></span></pre>
<h2>Conclusão</h2>
<p>Neste artigo vimos como começar a trabalhar com procedimentos armazenados no PostgreSQL. com alguns exemplos simples de criação de procedures simples. O recurso é muito útil para simplificar código e facilitar a programação de tarefas no banco de dados, principalmente quando as declarações SQL precisam ser executadas a partir de uma aplicação escrita em alguma linguagem de programação para acesso direto dos usuários.</p>
<p>Estudaremos recursos mais avançados de procedimentos armazenados nos próximos artigos, assim como outras formas de programação existentes para bancos de dados PostgreSQL, como Funções e Triggers.</p>
<p>Para saber mais sobre Procedimentos Armazenados no PostgreSQL, assista ao vídeo a seguir da Bóson Treinamentos no YouTube:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/Ig1hGqiPROI?si=ywRszZBlyo3BYNW0" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/procedimentos-armazenados-em-postgresql-stored-procedures/">Procedimentos Armazenados em PostgreSQL (Stored Procedures)</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/procedimentos-armazenados-em-postgresql-stored-procedures/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como apagar linhas de uma tabela com DELETE FROM  &#8211; SQL Server</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 11 Jul 2024 11:14:56 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20191</guid>

					<description><![CDATA[<p>DELETE FROM &#8211; Apagar Registros no SQL Server A cláusula DELETE FROM em SQL é usada para remover registros de uma tabela. Esta cláusula permite apagar uma ou mais linhas de uma tabela com base em uma condição especificada na cláusula WHERE. Se a cláusula WHERE não for usada, todos os registros da tabela serão removidos (cuidado!!!). Sintaxe Básica DELETE FROM nome_da_tabela WHERE condição; Exemplos 1. Apagar registros específicos Se quisermos remover todos os livros da tabela Livro cujo preço é maior que R$ 100,00: DELETE FROM Livro WHERE PrecoLivro &#62; 100.00; 2. Apagar todas as linhas de uma tabela Podemos remover todos os registros da tabela Autor, deixando a tabela vazia: DELETE FROM Autor; Observações importantes Integridade Referencial: Ao excluir registros que são referenciados por chaves estrangeiras em outras tabelas, é importante considerar as restrições de integridade referencial para evitar a violação dessas restrições. Backups: Antes de executar operações de exclusão em massa, é altamente recomendável fazer backup dos dados, pois a operação de DELETE é irreversível (não tem Ctrl+Z!!!). Performance: Para limpar totalmente tabelas grandes, operações de DELETE podem ser lentas e consumir muitos recursos. Em alguns casos, pode ser mais eficiente truncar a tabela (usando TRUNCATE TABLE) [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/">Como apagar linhas de uma tabela com DELETE FROM  &#8211; SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>DELETE FROM &#8211; Apagar Registros no SQL Server</h2>
<p>A cláusula <strong>DELETE FROM</strong> em SQL é usada para remover registros de uma tabela. Esta cláusula permite apagar uma ou mais linhas de uma tabela com base em uma condição especificada na <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/13-t-sql-where-filtrando-registros-em-uma-consulta-sql-server/">cláusula WHERE</a>. Se a cláusula WHERE não for usada, todos os registros da tabela serão removidos (cuidado!!!).</p>
<h3>Sintaxe Básica</h3>
<pre><span style="color: #800080;"><strong>DELETE FROM nome_da_tabela</strong></span>
<span style="color: #800080;"><strong>WHERE condição;</strong></span></pre>
<h3>Exemplos</h3>
<p>1. Apagar registros específicos</p>
<p>Se quisermos remover todos os livros da tabela Livro cujo preço é maior que R$ 100,00:</p>
<pre><strong>DELETE FROM Livro</strong>
<strong>WHERE PrecoLivro &gt; 100.00;</strong></pre>
<p>2. Apagar todas as linhas de uma tabela</p>
<p>Podemos remover todos os registros da tabela Autor, deixando a tabela vazia:</p>
<pre><strong>DELETE FROM Autor;</strong></pre>
<h3>Observações importantes</h3>
<p><strong>Integridade Referencial</strong>: Ao excluir registros que são referenciados por chaves estrangeiras em outras tabelas, é importante considerar as restrições de integridade referencial para evitar a violação dessas restrições.<br />
<strong>Backups</strong>: Antes de executar operações de exclusão em massa, é altamente recomendável fazer <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-realizar-backup-e-restore-no-microsoft-sql-server/">backup dos dados</a>, pois a operação de DELETE é irreversível (não tem Ctrl+Z!!!).<br />
<strong>Performance</strong>: Para limpar totalmente tabelas grandes, operações de DELETE podem ser lentas e consumir muitos recursos. Em alguns casos, pode ser mais eficiente truncar a tabela (usando <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/9-t-sql-truncate-table-excluindo-todos-os-dados-de-uma-tabela-sql-server/">TRUNCATE TABLE</a>) ou recriá-la.</p>
<p>Para saber mais sobre SQL DELETE, assista a um vídeo da Bóson Treinamentos no YouTube:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/XW37gfHvofE?si=5wu4UW_rjuYGYIgf" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/">Como apagar linhas de uma tabela com DELETE FROM  &#8211; SQL Server</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/como-apagar-linhas-de-uma-tabela-com-delete-from-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Importar arquivo CSV no SQL Server para inserir registros em uma tabela</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 21 Mar 2024 12:06:54 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20025</guid>

					<description><![CDATA[<p>Como importar arquivo CSV no SQL Server Neste tutorial mostro como importar um arquivo no formato CSV para uma tabela de um banco de dados SQL Server, de modo a realizar a inserção de múltiplos registros de uma só vez, por meio de uma operação INSERT INTO. Para tal vamos usar dois arquivos: o arquivo CSV propriamente dito, contendo os dados a serem inseridos na tabela, e um arquivo especificador de formatos para ajustar os dados do arquivo CSV com as colunas específicas da tabela, além é claro do código SQL que executará a tarefa de inserção dos registros em bulk (vários de uma vez). O que é um arquivo CSV? Um arquivo CSV (Comma-Separated Values / Valores Separados por Vírgulas) é um tipo de arquivo de texto simples que armazena dados tabulares de forma estruturada, empregado com frequência para importar e exportar dados entre diferentes programas, sistemas e plataformas. Neste tipo de arquivo, cada linha representa uma entrada de dados (um registro) e cada campo (coluna) é separado por um caractere delimitador, geralmente uma vírgula (&#8220;,&#8221;), ponto e vírgula (&#8220;;&#8221;) ou tabulação (&#8220;tab&#8221;). O mais comum é usar a vírgula, daí o nome do formato. Cada linha no arquivo [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/">Importar arquivo CSV no SQL Server para inserir registros em uma tabela</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como importar arquivo CSV no SQL Server</h2>
<p>Neste tutorial mostro como importar um arquivo no formato CSV para uma tabela de um banco de dados SQL Server, de modo a realizar a inserção de múltiplos registros de uma só vez, por meio de uma operação <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/8-t-sql-insert-into-values-inserir-dados-nas-tabelas-sql-server/">INSERT INTO</a>.</p>
<p>Para tal vamos usar dois arquivos: o arquivo CSV propriamente dito, contendo os dados a serem inseridos na tabela, e um arquivo especificador de formatos para ajustar os dados do arquivo CSV com as colunas específicas da tabela, além é claro do código SQL que executará a tarefa de inserção dos registros em bulk (vários de uma vez).</p>
<h3>O que é um arquivo CSV?</h3>
<p>Um arquivo <strong>CSV</strong> (<em>Comma-Separated Values</em> / Valores Separados por Vírgulas) é um tipo de arquivo de texto simples que armazena dados tabulares de forma estruturada, empregado com frequência para importar e exportar dados entre diferentes programas, sistemas e plataformas.</p>
<p>Neste tipo de arquivo, cada linha representa uma entrada de dados (um registro) e cada campo (coluna) é separado por um caractere delimitador, geralmente uma vírgula (&#8220;,&#8221;), ponto e vírgula (&#8220;;&#8221;) ou tabulação (&#8220;tab&#8221;). O mais comum é usar a vírgula, daí o nome do formato.</p>
<p>Cada linha no arquivo representa um registro e os campos podem conter texto, números, datas ou outros tipos de dados quaisquer. Usamos arquivos csv em aplicativos de planilhas, bancos de dados, programas para análise de dados e diversas outras aplicações, pois são bastante simples e fáceis de manipular.</p>
<p>Vamos usar neste tutorial um arquivo CSV de nome Livros.csv, que conterá dados a serem inseridos em uma tabela de nome <strong>Livro</strong>, e com ele vamos cadastrar vários registros de forma rápida e simples.</p>
<h3>Arquivo CSV de exemplo: Livros.csv</h3>
<p>A seguir temos o conteúdo do arquivo a ser usado no exemplo de inserção de linhas na tabela. Neste arquivo, a primeira linha é uma linha de cabeçalho, contendo os nomes das colunas da tabela que receberá os dados (tabela de nome <strong>Livro</strong>), separados por vírgulas. Você deve alterar o conteúdo desse arquivo de acordo com a tabela do banco que está usando, seguindo as instruções na sequência.</p>
<p>As linhas subsequentes contém os dados em si, sendo que cada linha do arquivo corresponde a uma linha a ser inserida na tabela (um registro), também separadas por vírgulas, seguindo a mesma ordem das colunas descritas no cabeçalho:</p>
<pre><span style="color: #800080;"><strong>NomeLivro,ISBN13,DataPub,PreçoLivro,NumeroPaginas,IdEditora,IdAssunto</strong></span>
<span style="color: #800080;"><strong>2001 - Um Odisséia no Espaço,9788576571551,20200930,55.86,336,3,1</strong></span>
<span style="color: #800080;"><strong>Fahrenheit 451,9788525052247,20120601,43.56,216,3,1</strong></span>
<span style="color: #800080;"><strong>Admirável mundo novo,9788525056009,20140101,50.32,312,3,1</strong></span>
<span style="color: #800080;"><strong>1984,9788535914849,20090721,29.67,416,14,1</strong></span>
<span style="color: #800080;"><strong>A volta ao mundo em 80 dias,9788537816134,18730101,59.41,256,11,5</strong></span>
<span style="color: #800080;"><strong>O Nome da Rosa,9788501115829,20191216,51.99,592,18,5</strong></span>
<span style="color: #800080;"><strong>Memórias Póstumas de Brás Cubas,9788525433131,18810101,34.90,240,14,6</strong></span>
<span style="color: #800080;"><strong>O Evangelho Segundo Jesus Cristo,9788535905595,19910101,49.90,512,14,6</strong></span>
<span style="color: #800080;"><strong>Cidades Invisíveis,9788535907445,19720101,42.80,176,14,6</strong></span>
<span style="color: #800080;"><strong>Windows Server 2016: Installing &amp; Configuring,9781535074094,20160712,432.00,436,4,11</strong></span>
<span style="color: #800080;"><strong>Ensaio Sobre a Cegueira,9788571645118,19950101,39.90,312,14,6</strong></span>
<span style="color: #800080;"><strong>Ulisses,9780141184432,19220202,78.90,450,16,6</strong></span>
<span style="color: #800080;"><strong>Practical Electronics for Inventors,9781259587542,20160711,212.58,1056,9,3</strong></span>
<span style="color: #800080;"><strong>Eu Robô,9788576571667,19501202,35.00,300,3,1</strong></span>
<span style="color: #800080;"><strong>Dom Casmurro,9788525404186,19000101,19.90,256,14,6</strong></span></pre>
<p>Insira esse conteúdo em um arquivo de texto simples vazio, como um arquivo do bloco de notas no Windows, e salve com o nome de Livros.csv. Caso queira, acrescente mais livros à listagem. Não é necessário usar aspas para delimitar os dados do tipo VARCHAR ou DATE.</p>
<p>Obs.: Tome cuidado ao salvar o arquivo para não salvá-lo com a extensão <strong>.txt</strong>!!! Para evitar esse problema, selecione &#8220;<em>Todos os arquivos</em>&#8221; em &#8220;<em>Tipo</em>&#8221; na caixa de diálogo Salvar, e certifique-se de usar a codificação <strong>UTF-8</strong>, como segue:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-20026" title="Como salvar um arquivo no formato CSV no Bloco de Notas" src="https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson.jpg" alt="Como salvar um arquivo no formato CSV no Bloco de Notas" width="600" height="133" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson.jpg 780w, https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson-420x93.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2024/03/salvar-arquivo-csv-boson-768x170.jpg 768w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<p>A seguir criaremos o arquivo de formato XML a ser usado com esse csv.</p>
<h3>Arquivo de Formato XML</h3>
<p>Um arquivo de formato é um arquivo do tipo XML (<em>e<strong>X</strong>tensible <strong>M</strong>arkup <strong>L</strong>anguage</em>) que descreve a estrutura dos dados contidos no arquivo CSV, especificando como os campos são delimitados, o comprimento máximo de cada campo e como esses campos são mapeados para as colunas da tabela do banco de dados durante o processo de importação de dados em massa..</p>
<p>O arquivo que usaremos possui o nome formato.xml. Crie-o com um editor de textos, usando o conteúdo a seguir, e salve-o no mesmo diretório do arquivo Livros.CSV:</p>
<pre class="a-b-r-La"><strong>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
  &lt;RECORD&gt;
    &lt;FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100"/&gt;
    &lt;FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="13"/&gt;
    &lt;FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="8"/&gt;
    &lt;FIELD ID="4" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="19"/&gt;
    &lt;FIELD ID="5" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="10"/&gt;
    &lt;FIELD ID="6" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="5"/&gt;
    &lt;FIELD ID="7" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="5"/&gt;
  &lt;/RECORD&gt;
  &lt;ROW&gt;
    &lt;COLUMN SOURCE="1" NAME="NomeLivro" xsi:type="SQLVARYCHAR"/&gt;
    &lt;COLUMN SOURCE="2" NAME="ISBN13" xsi:type="SQLVARYCHAR"/&gt;
    &lt;COLUMN SOURCE="3" NAME="DataPub" xsi:type="SQLDATE"/&gt;
    &lt;COLUMN SOURCE="4" NAME="PrecoLivro" xsi:type="SQLMONEY"/&gt;
    &lt;COLUMN SOURCE="5" NAME="NumeroPaginas" xsi:type="SQLSMALLINT"/&gt;
    &lt;COLUMN SOURCE="6" NAME="IdEditora" xsi:type="SQLSMALLINT"/&gt;
    &lt;COLUMN SOURCE="7" NAME="IdAssunto" xsi:type="SQLTINYINT"/&gt;
  &lt;/ROW&gt;
&lt;/BCPFORMAT&gt;</strong></pre>
<p>O funcionamento deste arquivo é o seguinte:</p>
<ul>
<li><strong>&lt;BCPFORMAT&gt;</strong>: Elemento raiz do arquivo XML que define o formato do arquivo de dados.</li>
<li><strong>&lt;RECORD&gt;</strong>: Define a estrutura de cada registro (linha) no arquivo CSV.</li>
<li><strong>&lt;FIELD&gt;</strong>: Define os campos (colunas) do registro. Cada tag <strong>&lt;FIELD&gt;</strong> especifica o identificador do campo (ID), o tipo de terminador que separa os campos (TERMINATOR), e o comprimento máximo (MAX_LENGTH) do campo.</li>
<li><strong>&lt;ROW&gt;</strong>: Define a correspondência entre os campos do arquivo CSV e as colunas da tabela do banco de dados.</li>
<li><strong>&lt;COLUMN&gt;</strong>: Especifica como cada campo do arquivo CSV (<em>SOURCE</em>) é mapeado para uma coluna na tabela do banco de dados (<em>NAME</em>). Além disso, define o tipo de dados da coluna (xsi:type), que pode ser:
<ul>
<li><strong>SQLVARYCHAR</strong> para strings</li>
<li><strong>SQLDATE</strong> para datas</li>
<li><strong>SQLMONEY</strong> para valores monetários</li>
<li><strong>SQLSMALLINT</strong> para números inteiros pequenos</li>
<li><strong>SQLTINYINT</strong> para números inteiros muito pequenos.</li>
</ul>
</li>
</ul>
<h3>Código SQL</h3>
<p>E a seguir temos o código SQL que deverá ser executado no SQL Server, por exemplo usando o SSMS (SQL Server Management Studio):</p>
<pre><strong>INSERT INTO Livro (NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto)</strong>
<strong>SELECT </strong>
<strong>    NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto</strong>
<strong>FROM OPENROWSET(</strong>
<strong>    BULK 'C:\SQL\Livros.CSV',</strong>
<strong>    FORMATFILE = 'C:\SQL\Formato.xml',</strong>
<strong>CODEPAGE = '65001',  -- UTF-8</strong>
<strong>FIRSTROW = 2</strong>
<strong>) AS LivrosCSV;</strong></pre>
<div>O código opera da seguinte forma:</div>
<div>
<p>1. A linha &#8220;<strong>INSERT INTO Livro (NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto)</strong>&#8221; é a declaração SQL usada para inserir os dados na tabela Livro. Serão preenchidos os campos NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora e IdAssunto.</p>
<p>2. O comando &#8220;<strong>SELECT NomeLivro, ISBN13, DataPub, PrecoLivro, NumeroPaginas, IdEditora, IdAssunto</strong>&#8221; determina quais colunas do arquivo CSV serão selecionadas para inserção na tabela de livros.</p>
<p>3. &#8220;<strong>FROM OPENROWSET(BULK &#8216;C:\SQL\Livros.CSV&#8217;, FORMATFILE = &#8216;C:\SQL\Formato.xml&#8217;, CODEPAGE = &#8216;65001&#8217;, FIRSTROW = 2)</strong>&#8220;: Aqui, estamos usando a função OPENROWSET para abrir e ler o arquivo CSV especificado. Os parâmetros desta função são:</p>
<ul>
<li><strong>BULK &#8216;C:\SQL\Livros.CSV&#8217;</strong>: Indica o caminho do arquivo CSV que será lido (no caso o arquivo está na pasta SQL dentro da raiz do sistema).</li>
<li><strong>FORMATFILE = &#8216;C:\SQL\Formato.xml</strong>&#8216;: Especifica o arquivo de formato XML que descreve a estrutura do arquivo CSV. Este arquivo de formato é utilizado para especificar detalhes sobre o layout do arquivo CSV, como a ordem das colunas e o delimitador utilizado.</li>
<li><strong>CODEPAGE = &#8216;65001&#8217;</strong>: Define a codificação de caracteres a ser usada durante a leitura do arquivo CSV. Neste caso, o valor 65001 representa a codificação UTF-8.</li>
<li><strong>FIRSTROW = 2</strong>: Indica que a leitura do arquivo CSV começará a partir da segunda linha, de modo a ignorar o cabeçalho do arquivo CSV (que é a primeira linha).</li>
</ul>
<p>4. <strong>AS LivrosCSV;</strong>: Define um <em>alias</em> (nome de correlação) para os dados extraídos do arquivo CSV, permitindo que esses dados sejam referenciados dentro da consulta como se fossem uma tabela temporária chamada LivrosCSV. É um parâmetro obrigatório aqui.</p>
<p>Execute o comando acima no SQL Server, e, se nenhum erro for retornado, verifique a inserção dos registros com um SELECT simples:</p>
<pre><strong>SELECT * FROM Livro;</strong></pre>
</div>
<h3>Conclusão</h3>
<p>Inserir alguns poucos registros em uma tabela de banco de dados é uma tarefa simples e rápida. Porém, cadastrar muitos registros &#8211; centenas, milhares ou até mesmo milhões &#8211; pode se tornar extremamente trabalhoso e demorado, e neste caso podemos recorrer à importação em massa dos dados. Neste tutorial vimos uma forma simples de fazer isso no SQL Server: usando arquivos de texto do tipo CSV.</p>
<p>Nos próximos tutoriais veremos outras formas de importação (e também exportação) de dados em bancos de dados.</p>
<p>Prefere assistir a uma aula? Então assista ao vídeo da Bóson Treinamentos no YouTube sobre Arquivos CSV no MySQL:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/5ddHcVBusQg?si=mV4STXday0y_XeLq" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3>Colabore com a Bóson Treinamentos</h3>
<p>Ajude o canal adquirindo meus cursos na Udemy:</p>
<ul>
<li>Bancos de Dados com MySQL Básico: <a href="https://bit.ly/35QdWE4" target="_blank" rel="noopener">https://bit.ly/35QdWE4</a></li>
<li>Lógica de Programação com Português Estruturado: <a href="https://bit.ly/3QKPn22" target="_blank" rel="noopener">https://bit.ly/3QKPn22</a></li>
<li>Programação em Python do Zero: <a href="https://bit.ly/python-boson" target="_blank" rel="noopener">https://bit.ly/python-boson</a></li>
</ul>
<p>Adquira também livros e outros itens na loja da Bóson Treinamentos na Amazon e ajude o canal a se manter e crescer: <a href="https://www.amazon.com.br/shop/bosontreinamentos" target="_blank" rel="noopener">https://www.amazon.com.br/shop/bosontreinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/">Importar arquivo CSV no SQL Server para inserir registros em uma tabela</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/importar-arquivo-csv-no-sql-server-para-inserir-registros-em-uma-tabela/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>O que é SQL: Introdução e grupos de comandos &#8211; Curso de SQL Server &#8211; 01</title>
		<link>https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/</link>
					<comments>https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 09 Jun 2023 20:08:07 +0000</pubDate>
				<category><![CDATA[SQL com SQL Server]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/blog/?p=78</guid>

					<description><![CDATA[<p>O que é SQL &#8211; Structured Query Language SQL é uma Linguagem de Consulta Estruturada padrão para acesso a Bancos de Dados Usada em inúmeros sistemas, como MySQL, SQL Server, Oracle, Sybase, Access, DB2, PostgreSQL, etc. Cada um desses sistemas pode utilizar um &#8220;dialeto&#8221; diferente do SQL, como T-SQL (SQL Server), PL/SQL (Oracle), JET SQL (Access), etc. História Resumida do SQL Foi o matemático britânico Edgar F. Codd, no início dos anos 1970, quem propôs o famoso modelo relacional para bancos de dados e, sendo um matemático, ele formalizou diversos conceitos resultando no que chamamos de álgebra relacional e cálculo relacional. Essa álgebra e cálculo relacional eram conceitos teóricos até que empresas como a IBM e outras começaram a implementar esses conceitos em projetos internos, acadêmicos e de pesquisa. Essas empresas também queriam criar uma linguagem que fosse padrão para realizar consultas em bancos de dados relacionais. No início, foi desenvolvida uma linguagem chamada de QUEL (Querying Using the English Language / Consulta Usando a Língua Inglesa), na Universidade da Califórnia, Berkeley. Na IBM especificamente, os pesquisadores queriam criar uma linguagem própria e iniciaram um projeto de nome SQUARE (Specifying Queries Using a Relational Environment / Especificação de Consultas Usando [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/">O que é SQL: Introdução e grupos de comandos &#8211; Curso de SQL Server &#8211; 01</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2><strong>O que é SQL &#8211; Structured Query Language</strong></h2>
<ul>
<li>SQL é uma Linguagem de Consulta Estruturada padrão para acesso a Bancos de Dados</li>
<li>Usada em inúmeros sistemas, como MySQL, SQL Server, Oracle, Sybase, Access, DB2, PostgreSQL, etc.</li>
<li>Cada um desses sistemas pode utilizar um &#8220;dialeto&#8221; diferente do SQL, como T-SQL (SQL Server), PL/SQL (Oracle), JET SQL (Access), etc.</li>
</ul>
<h3>História Resumida do SQL</h3>
<p>Foi o matemático britânico <a href="https://www.bosontreinamentos.com.br/modelagem-de-dados/as-12-regras-de-codd-para-sistemas-de-bancos-de-dados-relacionais/">Edgar F. Codd</a>, no início dos anos 1970, quem propôs o famoso modelo relacional para bancos de dados e, sendo um matemático, ele formalizou diversos conceitos resultando no que chamamos de álgebra relacional e cálculo relacional.</p>
<p>Essa álgebra e cálculo relacional eram conceitos teóricos até que empresas como a IBM e outras começaram a implementar esses conceitos em projetos internos, acadêmicos e de pesquisa. Essas empresas também queriam criar uma linguagem que fosse padrão para realizar consultas em bancos de dados relacionais.</p>
<p>No início, foi desenvolvida uma linguagem chamada de <strong>QUEL</strong> (<em>Querying Using the English Language</em> / Consulta Usando a Língua Inglesa), na Universidade da Califórnia, Berkeley. Na IBM especificamente, os pesquisadores queriam criar uma linguagem própria e iniciaram um projeto de nome<strong> SQUARE</strong> (<em>Specifying Queries Using a Relational Environmen</em>t / Especificação de Consultas Usando um Ambiente Relacional).</p>
<p>Esse trabalho resultou em uma linguagem de consulta que tinha uma notação científica com subíndices e superíndices, na prática difícil de digitar em teclados de computador (da época). Para resolver isso, a linguagem foi redefinida para usar apenas caracteres padrão da língua inglesa, sendo então batizada de <strong>SEQUEL</strong>. Porém, este nome era uma marca registrada no Reino Unido, o que os impedia de usá-lo. Então, resolveram o problema simplesmente removendo as vogais da palavra SEQUEL, e assim nasceu o termo <strong>SQL</strong>. Em 1986, o SQL se tormou um padrão ISO e ANSI.</p>
<p>De forma interessante, apesar de seus desenvolvedores terem renomeado o SEQUEL para SQL, muitos continuaram a chamá-lo de &#8220;<em>sequel</em>&#8220;. E ainda hoje, muitos desenvolvedores de software e profissionais da área de bancos de dados (de língua inglesa, não no Brasil) ainda pronunciam esse nome como &#8220;sequel&#8221;. A descrição da sigla como sendo <em>Structured Query Language</em> (Linguagem de Consulta Estruturada) foi aparecer posteriormente apenas.</p>
<h3><strong>Funções Principais do SQL</strong></h3>
<ul>
<li>Permite o acesso a dados em SGBDR</li>
<li>Permite definir os dados no banco de dados e manipulá-los.</li>
<li>Pode ser embutido em outras linguagens usando módulos SQL, bibliotecas, etc.</li>
<li>Permite criar e excluir bancos de dados e tabelas.</li>
<li>Permite a criação de Visões (Exibições), Stored Procedures e Funções em um Banco de Dados.</li>
<li>Permite configurar permissões de acesso em tabelas, procedimentos e visões.</li>
</ul>
<h3><strong>Grupos de Comandos</strong></h3>
<p>Os comandos SQL podem ser divididos em quatro grupos principais:</p>
<ul>
<li>DDL</li>
<li>DML</li>
<li>DCL</li>
<li>DQL</li>
</ul>
<h3><strong>DDL – Data Definition Language</strong></h3>
<table style="height: 117px;" width="654">
<tbody>
<tr>
<td style="text-align: center; width: 80px;"><strong>Comando</strong></td>
<td style="text-align: center; width: 558px;"><strong>Descrição</strong></td>
</tr>
<tr>
<td style="width: 80px;">CREATE</td>
<td style="width: 558px;">Cria uma nova tabela, visão ou outro objeto no BD.</td>
</tr>
<tr>
<td style="width: 80px;">ALTER</td>
<td style="width: 558px;">Modifica um objeto existente no BD, como uma tabela.</td>
</tr>
<tr>
<td style="width: 80px;">DROP</td>
<td style="width: 558px;">Exclui uma tabela inteira, uma exibição de uma tabela ou outro objeto no banco de dados.</td>
</tr>
</tbody>
</table>
<h3><strong><br />
DML – Data Manipulation Language</strong></h3>
<table>
<tbody>
<tr>
<td style="text-align: center;"><strong>Comando</strong></td>
<td style="text-align: center;"><strong>Descrição</strong></td>
</tr>
<tr>
<td>INSERT</td>
<td>Cria um registro (linha)</td>
</tr>
<tr>
<td>UPDATE</td>
<td>Modifica registros</td>
</tr>
<tr>
<td>DELETE</td>
<td>Exclui registros</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><strong>DCL – Data Control Language</strong></h3>
<table>
<tbody>
<tr>
<td style="text-align: center;"><strong>Comando</strong></td>
<td style="text-align: center;"><strong>Descrição</strong></td>
</tr>
<tr>
<td>GRANT</td>
<td>Dá privilégios a um usuário</td>
</tr>
<tr>
<td>REVOKE</td>
<td>Retira privilégios fornecidos a um usuário</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><strong>DQL – Data Query Language</strong></h3>
<table style="height: 115px;" width="444">
<tbody>
<tr>
<td style="text-align: center;"><strong>Comando</strong></td>
<td style="text-align: center;"><strong>Descrição</strong></td>
</tr>
<tr>
<td>SELECT</td>
<td>Obtém registros especificados de uma ou mais tabelas. (consulta)</td>
</tr>
</tbody>
</table>
<p>O vídeo a seguir explica em detalhes cada um dos grupos de comandos SQL apresentados neste tutorial:</p>
<p><iframe loading="lazy" src="//www.youtube.com/embed/2kWoPT-6JqA?list=PLucm8g_ezqNqI5cW3alteV5olcMCcHYRK" width="640" height="390" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<hr />
<p><img loading="lazy" decoding="async" class="alignleft size-full wp-image-1825" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/01/Eu.png" alt="Eu" width="189" height="147" />Sobre Fábio dos Reis</p>
<p>Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Linux e Open Source em geral, Astrônomo Hobbysta e estudante de idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/">O que é SQL: Introdução e grupos de comandos &#8211; Curso de SQL Server &#8211; 01</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/sql-com-sql-server/1-t-sql-introducao-e-grupos-de-comandos-sql-server/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como acessar bancos de dados SQL Server usando Python</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-python/como-acessar-bancos-de-dados-sql-server-usando-python/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-python/como-acessar-bancos-de-dados-sql-server-usando-python/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 11 May 2023 11:15:14 +0000</pubDate>
				<category><![CDATA[Programação em Python]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19396</guid>

					<description><![CDATA[<p>Tutorial de acesso a bancos de dados SQL Server usando Python A linguagem Python possui suporte a uma grande quantidade de sistemas de bancos de dados, por meio do uso de bibliotecas específicas para cada SGBD. Neste tutorial vou mostrar como usar uma biblioteca de código aberto para acessar um banco de dados Microsoft SQL Server a partir de um script em Python, realizando a conexão ao banco e, posteriormente, uma consulta simples em uma de suas tabelas. Para acessar bancos de dados SQL Server usando Python, podemos usar a biblioteca pyodbc. Esta biblioteca permite, na verdade, acessar diversos bancos de dados ODBC, sendo o SQL Server apenas um deles. Vamos ao tutorial passo a passo. Python e SQL Server 1. Instalar o driver de acesso ao SQL Server Antes de começar, precisamos instalar a biblioteca ODBC para Python. Podemos usar o pip ou o conda para instalá-la com um dos seguintes comandos: $ pip install pyodbc # ou $ conda install pyodbc 2. Importamos a biblioteca necessária e criamos uma nova conexão com o banco de dados import pyodbc # String de conexão com o banco de dados conn = pyodbc.connect('Driver={SQL Server};' 'Server=nome_servidor;' 'Database=nome_banco_dados;' 'Trusted_Connection=yes;') Substituimos nome_servidor e nome_banco_dados [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-python/como-acessar-bancos-de-dados-sql-server-usando-python/">Como acessar bancos de dados SQL Server usando Python</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Tutorial de acesso a bancos de dados SQL Server usando Python</h2>
<p>A linguagem Python possui suporte a uma grande quantidade de sistemas de bancos de dados, por meio do uso de bibliotecas específicas para cada SGBD.</p>
<p>Neste tutorial vou mostrar como usar uma biblioteca de código aberto para acessar um banco de dados Microsoft SQL Server a partir de um script em Python, realizando a conexão ao banco e, posteriormente, uma consulta simples em uma de suas tabelas.</p>
<p>Para acessar bancos de dados SQL Server usando Python, podemos usar a <a href="https://pypi.org/project/pyodbc/" target="_blank" rel="noopener">biblioteca pyodbc</a>. Esta biblioteca permite, na verdade, acessar diversos bancos de dados ODBC, sendo o SQL Server apenas um deles.</p>
<p>Vamos ao tutorial passo a passo.</p>
<h3>Python e SQL Server</h3>
<h4><strong>1. Instalar o driver de acesso ao SQL Server</strong></h4>
<p>Antes de começar, precisamos instalar a biblioteca ODBC para Python. Podemos usar o pip ou o conda para instalá-la com um dos seguintes comandos:</p>
<pre><strong>$ pip install pyodbc  <span style="color: #339966;"># ou</span>
$ conda install pyodbc</strong></pre>
<h4><strong>2. Importamos a biblioteca necessária e criamos uma nova conexão com o banco de dados</strong></h4>
<pre><strong>import pyodbc

</strong><span style="color: #339966;"><strong># String de conexão com o banco de dados</strong></span>
<strong>conn = pyodbc.connect('Driver={SQL Server};'</strong>
<strong>'Server=nome_servidor;'</strong>
<strong>'Database=nome_banco_dados;'</strong>
<strong>'Trusted_Connection=yes;')</strong></pre>
<p>Substituimos <em>nome_servidor</em> e <em>nome_banco_dados</em> pelo nome do servidor e do banco de dados ao qual desejamos nos conectar (por exemplo, <em>localhost</em> e <em>db_biblioteca</em>, respectivamente).</p>
<p>Se precisamos usar a autenticação SQL Server, em vez de autenticação do Windows, a string de conexão fica assim:</p>
<pre><strong>conn = pyodbc.connect('Driver={SQL Server};'</strong>
<strong>'Server=nome_servidor;'</strong>
<strong>'Database=nome_banco_dados;'</strong>
<strong>'UID=usuário;'</strong>
<strong>'PWD=senha')</strong></pre>
<p>Substituimos <em>usuário</em> e <em>senha</em> pelo nome de usuário e senha de acesso ao SQL Server.</p>
<h4><strong>3. Agora criamos um <a href="http://www.bosontreinamentos.com.br/sql-com-sql-server/introducao-aos-cursores-no-sql-server/">objeto do tipo cursor</a> e o empregamos para executar os comandos SQL desejados</strong></h4>
<pre><span style="color: #339966;"><strong># Criar um objeto cursor</strong></span>
<strong>cursor = conn.cursor()

</strong><span style="color: #339966;"><strong># Comando SQL a executar</strong></span>
<strong>cursor.execute('SELECT * FROM nome_tabela')

</strong><span style="color: #339966;"><strong># Buscar todos os resultados</strong></span>
<strong>for row in cursor:</strong>
<strong>    print(row)</strong></pre>
<p>Devemos substituir <em>nome_tabela</em> pelo nome da tabela que desejamos consultar. Também é possível executar comandos SQL de atualização, inserção e exclusão usando o método <strong><em>execute</em></strong>.</p>
<h4><strong>4. Por fim fechamos a conexão com o banco de dados:</strong></h4>
<pre><strong>conn.close()</strong></pre>
<p>Essa instrução irá encerrar a conexão com o banco de dados SQL Server.</p>
<h3>Exemplo completo</h3>
<p>Vamos usar o <a href="http://www.bosontreinamentos.com.br/sql-com-sql-server/3-t-sql-create-database-criar-banco-de-dados-sql-server/">banco de dados db_biblioteca</a> neste exemplo, acessando a <a href="http://www.bosontreinamentos.com.br/sql-com-sql-server/5-t-sql-create-table-criacao-de-tabelas-sql-server/">tabela de livros (tbl_livros)</a> e retornando todas as linhas dessa tabela. O servidor SQL Server em questão utiliza autenticação do Windows:</p>
<pre><strong>import pyodbc

</strong><span style="color: #339966;"><strong># Conexão com o banco de dados</strong></span>
<strong>conn = pyodbc.connect('Driver={SQL Server};'</strong>
<strong>'Server=localhost;'</strong>
<strong>'Database=db_biblioteca;'</strong>
<strong>'Trusted_Connection=yes;')

</strong><span style="color: #339966;"><strong># Criar o objeto cursor</strong></span>
<strong>cursor = conn.cursor()

</strong><span style="color: #339966;"><strong># Executar a consulta SQL</strong></span>
<strong>cursor.execute('SELECT * FROM tbl_livro')

</strong><span style="color: #339966;"><strong># Busca todos os resultados</strong></span>
<strong>for row in cursor:</strong>
<strong>    print(row)</strong></pre>
<p>Resultado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-19399" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/sql-server-python-consulta-SQL.jpg" alt="Consulta a banco SQL Server com Python e pyodbc" width="792" height="118" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/sql-server-python-consulta-SQL.jpg 792w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/sql-server-python-consulta-SQL-420x63.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/sql-server-python-consulta-SQL-768x114.jpg 768w" sizes="auto, (max-width: 792px) 100vw, 792px" /></p>
<h3>Inserir novas linhas no banco de dados</h3>
<p>E se quisermos inserir novos registros em uma tabela?</p>
<p>Neste caso podemos criar um dicionário contendo pares chave:valor representando os nomes das colunas da tabela e os respectivos dados a serem inseridos, e então criar uma consulta SQL para enviar esses dados ao banco, como no exemplo a seguir, onde eu crio um novo registro na tabela de autores:</p>
<pre><strong><span style="color: #339966;"># Criar um dicionário com os dados a inserir no banco</span>

autor = {</strong>
<strong>"ID_Autor": 10,</strong>
<strong>"Nome_Autor": "Fábio",</strong>
<strong>"Sobrenome_Autor": "dos Reis"</strong>
<strong>}

</strong><span style="color: #339966;"><strong># Criar a consulta SQL</strong></span>
<strong>sql_query = f"INSERT INTO tbl_autores (ID_Autor, Nome_Autor, Sobrenome_Autor) VALUES (?, ?, ?)"

</strong><span style="color: #339966;"><strong># Cursor para executar a consulta</strong></span>
<strong>cursor = conn.cursor()

</strong><span style="color: #339966;"><strong># Executar a consulta</strong></span>
<strong>cursor.execute(sql_query, autor["ID_Autor"], autor["Nome_Autor"], autor["Sobrenome_Autor"])

</strong><span style="color: #339966;"><strong># Confirmar a transação (comitar)</strong></span>
<strong>conn.commit()

</strong><span style="color: #339966;"><strong># Encerrar a conexão</strong></span>
<strong>conn.close()</strong></pre>
<p>No exemplo acima, o cursor é criado usando a conexão estabelecida na etapa anterior. Em seguida, a consulta é executada usando o método execute() do cursor. Certifique-se de passar os valores a serem inseridos na consulta como argumentos para o método execute().</p>
<p>Por fim, é importante confirmar a transação usando o método commit() da conexão. Se você não fizer isso, os dados inseridos não serão salvos no banco de dados.</p>
<p>É isso aí! Este foi um tutorial básico para acesso a bancos de dados SQL Server usando a linguagem Python com a biblioteca pyodbc. Existem muitas outras opções de configuração e métodos disponíveis na biblioteca pyodbc, e algumas delas serão discutidas nos próximos tutoriais dessa série.</p>
<p>.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-python/como-acessar-bancos-de-dados-sql-server-usando-python/">Como acessar bancos de dados SQL Server usando Python</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-python/como-acessar-bancos-de-dados-sql-server-usando-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Comandos DCL SQL e sua sintaxe</title>
		<link>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dcl-sql-e-sua-sintaxe/</link>
					<comments>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dcl-sql-e-sua-sintaxe/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 31 Mar 2023 11:46:44 +0000</pubDate>
				<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18882</guid>

					<description><![CDATA[<p>Comandos DCL SQL e sua sintaxe Os comandos DCL (Data Control Language / Linguagem de Controle de Dados) em SQL são um conjunto de declarações responsáveis por controlar e gerenciar a segurança e permissões de acesso aos dados armazenados em um banco de dados relacional. Esses comandos permitem que o administrador do banco de dados conceda ou revogue privilégios de acesso para usuários e grupos de usuários, controlando quem tem permissão para visualizar, modificar ou excluir dados específicos. Os comandos DCL mais comuns são GRANT e REVOKE. O comando GRANT é usado para conceder permissões a usuários ou grupos de usuários, permitindo que eles executem determinadas operações em objetos específicos, como tabelas ou views. O comando REVOKE, por sua vez, é usado para revogar essas permissões, removendo o acesso aos objetos especificados. Os comandos DCL também incluem outras funcionalidades importantes, como a capacidade de definir papéis (roles) e definir políticas de segurança para proteger dados sensíveis. Os papéis são usados para agrupar usuários com permissões semelhantes, simplificando a administração de permissões em grandes bancos de dados com muitos usuários. Para implementar políticas de segurança, os comandos DCL também permitem que o administrador defina restrições de acesso para determinados usuários ou [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dcl-sql-e-sua-sintaxe/">Comandos DCL SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Comandos DCL SQL e sua sintaxe</h2>
<p>Os comandos <strong>DCL</strong> (<em>Data Control Language</em> / Linguagem de Controle de Dados) em SQL são um conjunto de declarações responsáveis por controlar e gerenciar a segurança e permissões de acesso aos dados armazenados em um <a href="http://www.bosontreinamentos.com.br/bancos-de-dados/o-que-e-um-banco-de-dados-relacional/">banco de dados relacional</a>.</p>
<p>Esses comandos permitem que o administrador do banco de dados conceda ou revogue privilégios de acesso para usuários e grupos de usuários, controlando quem tem permissão para visualizar, modificar ou excluir dados específicos.</p>
<p>Os comandos DCL mais comuns são <strong>GRANT</strong> e <strong>REVOKE</strong>. O comando GRANT é usado para conceder permissões a usuários ou grupos de usuários, permitindo que eles executem determinadas operações em objetos específicos, como tabelas ou views.</p>
<p>O comando REVOKE, por sua vez, é usado para revogar essas permissões, removendo o acesso aos objetos especificados.</p>
<p>Os comandos DCL também incluem outras funcionalidades importantes, como a capacidade de definir papéis (roles) e definir políticas de segurança para proteger dados sensíveis. Os papéis são usados para agrupar usuários com permissões semelhantes, simplificando a administração de permissões em grandes bancos de dados com muitos usuários.</p>
<p>Para implementar políticas de segurança, os comandos DCL também permitem que o administrador defina restrições de acesso para determinados usuários ou grupos de usuários. Isso pode incluir a restrição de acesso a determinadas tabelas, limitações na execução de certos comandos, ou a definição de restrições de acesso baseadas em funções ou papéis.</p>
<p>Vejamos com mais detalhes as declarações GRANT e REVOKE. usarei a sintaxe e exemplos dessas declarações no SGBD MySQL neste artigo.</p>
<h3>A Declaração GRANT</h3>
<p>A declaração GRANT em MySQL é usada para conceder permissões a usuários ou grupos de usuários para executar determinadas ações em um banco de dados específico.</p>
<p>A sintaxe básica da declaração GRANT no MySQL é a seguinte:</p>
<pre><span style="color: #800080;"><strong>GRANT permissão(s) ON nome_banco.nome_tabela TO 'usuario'@'host' IDENTIFIED BY 'senha';</strong></span></pre>
<p>Onde:</p>
<ul>
<li><strong>permissão(s)</strong> é a permissão ou conjunto de permissões que você deseja conceder, como SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES, etc.</li>
<li><strong>nome_banco.nome_tabela</strong> é o nome do banco de dados e da tabela em que você deseja conceder as permissões.</li>
<li><strong>&#8216;usuario&#8217;@&#8217;host&#8217;</strong> é o nome do usuário e o host (nome da máquina, como localhost ou ainda um endereço IP) a quem você deseja conceder as permissões.</li>
<li><strong>IDENTIFIED BY &#8216;senha&#8217;</strong> é a senha para o usuário especificado.</li>
</ul>
<p>Você deve substituir permissão(s) pelo conjunto de permissões que deseja conceder ao usuário especificado. Por exemplo, podemos usar a sintaxe:</p>
<pre><strong>GRANT SELECT, INSERT, UPDATE ON db_biblioteca.tbl_livros TO 'fabio'@'localhost' IDENTIFIED BY '123';</strong></pre>
<p>para conceder permissões de seleção, inserção e atualização na tabela especificada para o usuário especificado na tabela de livros do banco db_biblioteca.</p>
<p>Também é possível conceder permissões a todos os bancos de dados ou tabelas de uma só vez usando o caractere curinga (*). Por exemplo:</p>
<pre><strong>GRANT ALL PRIVILEGES ON *.* TO 'fabio'@'localhost' IDENTIFIED BY '123';</strong></pre>
<p>concederia acesso a todos os bancos de dados e tabelas no servidor MySQL ao usuário &#8216;fabio&#8217;.</p>
<h4>Exemplos da declaração GRANT SQL</h4>
<p>Vejamos mais alguns exemplos:</p>
<p>1. Conceder acesso total ao banco de dados db_biblioteca para o usuário fabio:</p>
<pre><strong>GRANT ALL PRIVILEGES ON db_biblioteca.* TO 'fabio'@'localhost' IDENTIFIED BY '123';</strong></pre>
<p>2. Conceder acesso somente leitura a um banco de dados para o usuário:</p>
<pre><strong>GRANT SELECT ON db_biblioteca.* TO 'fabio'@'localhost' IDENTIFIED BY '123';</strong></pre>
<p>3. Conceder acesso somente para inserir dados na tabela de autores para o usuário:</p>
<pre><strong>GRANT INSERT ON db_biblioteca.tbl_autores TO 'fabio'@'localhost' IDENTIFIED BY '123';</strong></pre>
<p>4. Conceder acesso a todos os bancos de dados para o usuário:</p>
<pre><strong>GRANT ALL PRIVILEGES ON *.* TO 'fabio'@'localhost' IDENTIFIED BY '123';</strong></pre>
<p>5. Conceder acesso total ao usuário com base em seu endereço IP:</p>
<pre><strong>GRANT ALL PRIVILEGES ON db_biblioteca.* TO 'fabio'@'192.168.1.100' IDENTIFIED BY '123';</strong></pre>
<h3>A Declaração REVOKE</h3>
<p>A declaração <strong>REVOKE</strong> em MySQL é usada para revogar as permissões concedidas anteriormente a um usuário ou grupo de usuários em um banco de dados ou tabela específica.</p>
<p>A sintaxe básica da declaração REVOKE no MySQL é a seguinte:</p>
<pre><span style="color: #800080;"><strong>REVOKE permissão(s) ON nome_banco_dados.nome_tabela FROM 'usuario'@'host';</strong></span></pre>
<p>Onde:</p>
<ul>
<li><strong>permissão(s)</strong> são as permissões que queremos revogar, como SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES, etc.</li>
<li><strong>nome_banco_dados.nome_tabela</strong> é o nome do banco de dados e tabela em que você deseja revogar as permissões.</li>
<li><strong>&#8216;usuario&#8217;@&#8217;host&#8217;</strong> é o nome do usuário e o host (como localhost ou um endereço IP) de quem você deseja revogar as permissões.</li>
</ul>
<p>Devemos substituir <em>permissão(s)</em> pelo conjunto de permissões que deseja revogar do usuário especificado. Por exemplo, podemos usar a sintaxe:</p>
<pre><span style="color: #800080;"><strong>REVOKE SELECT, INSERT, UPDATE ON nome_banco_dados.nome_tabela FROM 'usuario'@'localhost';</strong></span></pre>
<p>para revogar as permissões de seleção, inserção e atualização na tabela especificada para um usuário especificado.</p>
<p>Também é possível revogar permissões de todos os bancos de dados ou tabelas usando o caractere curinga (*). Por exemplo:</p>
<pre><span style="color: #800080;"><strong>REVOKE ALL PRIVILEGES ON *.* FROM 'usuario'@'localhost';</strong></span></pre>
<p>revogaria todas as permissões de todos os bancos de dados e tabelas no servidor MySQL para o usuário especificado.</p>
<p>Note que, ao revogar permissões, você precisa ter as permissões necessárias para executar a declaração REVOKE. Além disso, se você estiver revogando permissões de um usuário específico, certifique-se de que não haja outros usuários que dependam dessas permissões para acessar o banco de dados ou tabela.</p>
<h4>Exemplos da declaração REVOKE SQL</h4>
<p>Vejamos alguns exemplos:</p>
<p>1. Revogar todas as permissões do usuário fabio no banco de dados db_biblioteca:</p>
<pre><strong>REVOKE ALL PRIVILEGES ON db_biblioteca.* FROM 'fabio'@'localhost';</strong></pre>
<p>2. Revogar a permissão de seleção da tabela de editoras específica para o usuário:</p>
<pre><strong>REVOKE SELECT ON db_biblioteca.tbl_editoras FROM 'fabio'@'localhost';</strong></pre>
<p>3. Revogar a permissão de inserção na tabela de autores para um grupo de usuários:</p>
<pre><strong>REVOKE INSERT ON db_biblioteca.tbl_autores FROM 'grupo_usuarios'@'localhost';</strong></pre>
<p>4. Revogar todas as permissões do usuário fabio para todos os bancos de dados:</p>
<pre><strong>REVOKE ALL PRIVILEGES ON *.* FROM 'fabio'@'localhost';</strong></pre>
<h3>Resumo</h3>
<p>Em resumo, os <strong>comandos DCL</strong> em SQL são fundamentais para a segurança e integridade dos dados em um banco de dados.</p>
<p>Eles permitem que o administrador do banco de dados conceda ou revogue permissões de acesso para usuários e grupos de usuários, controlando quem pode visualizar, modificar ou excluir dados específicos. Além disso, os comandos DCL incluem recursos importantes, como a definição de papéis e políticas de segurança para proteger dados sensíveis.</p>
<p>Por isso, é importante que os desenvolvedores e administradores de bancos de dados tenham conhecimento desses comandos para garantir a segurança dos dados armazenados.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dcl-sql-e-sua-sintaxe/">Comandos DCL SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dcl-sql-e-sua-sintaxe/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Qual a diferença entre View e Materialized View em Bancos de Dados?</title>
		<link>https://www.bosontreinamentos.com.br/bancos-de-dados/qual-a-diferenca-entre-view-e-materialized-view-em-bancos-de-dados/</link>
					<comments>https://www.bosontreinamentos.com.br/bancos-de-dados/qual-a-diferenca-entre-view-e-materialized-view-em-bancos-de-dados/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 20 Mar 2023 12:06:59 +0000</pubDate>
				<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=14657</guid>

					<description><![CDATA[<p>Diferença entre View e Materialized View Em bancos de dados relacionais é comum o emprego de objetos variados para simplificar o acesso aos dados, assim como melhorar a performance de operações como consultas, inserções e atualizações, entre outras. Alguns desses objetos incluem procedimentos armazenados, triggers e eventos.  Visualizações são uma outra categoria de objetos com esses propósitos, e dois tipos principais existem: as visualizações comuns (&#8220;views&#8220;) e as visualizações materializadas (&#8220;materialized views&#8220;). Mas qual a diferença entre ambas?  E quando usar uma e quando usar outra? É o que explico a seguir. Visualização SQL Em bancos de dados, uma view (visualização ou exibição) e uma materialized view são dois tipos diferentes de objetos de banco de dados que atendem a propósitos diferentes. Uma view é uma tabela virtual derivada de uma ou mais tabelas em um banco de dados. Trata-se de uma consulta SQL armazenada que define um conjunto de linhas e colunas que podem ser consultadas como se fossem uma tabela normal. Uma visualização não armazena dados próprios, mas é uma consulta pré-definida salva que pode ser usada para recuperar dados das tabelas subjacentes quando necessário. Assim, atua como se fosse uma tabela comum aos olhos do usuário. Uma visualização [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/qual-a-diferenca-entre-view-e-materialized-view-em-bancos-de-dados/">Qual a diferença entre View e Materialized View em Bancos de Dados?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Diferença entre View e Materialized View</h2>
<p>Em <a href="http://www.bosontreinamentos.com.br/bancos-de-dados/o-que-e-um-banco-de-dados-relacional/">bancos de dados</a> relacionais é comum o emprego de objetos variados para simplificar o acesso aos dados, assim como melhorar a performance de operações como consultas, inserções e atualizações, entre outras. Alguns desses objetos incluem <a href="http://www.bosontreinamentos.com.br/mysql/mysql-procedimentos-armazenados-stored-procedures-basico-34/">procedimentos armazenados</a>, <a href="http://www.bosontreinamentos.com.br/mysql/mysql-triggers-definicao-sintaxe-e-criacao-44/">triggers</a> e eventos. </p>
<p>Visualizações são uma outra categoria de objetos com esses propósitos, e dois tipos principais existem: as visualizações comuns (&#8220;<em>views</em>&#8220;) e as visualizações materializadas (&#8220;<em>materialized views</em>&#8220;).</p>
<p>Mas qual a diferença entre ambas?  E quando usar uma e quando usar outra?</p>
<p>É o que explico a seguir.</p>
<h3>Visualização SQL</h3>
<p>Em bancos de dados, uma <em><strong>view</strong></em> (<em>visualização</em> ou <em>exibição</em>) e uma <em><strong>materialized view</strong></em> são dois tipos diferentes de objetos de banco de dados que atendem a propósitos diferentes.</p>
<p>Uma view é uma tabela virtual derivada de uma ou mais tabelas em um banco de dados. Trata-se de uma <a href="http://www.bosontreinamentos.com.br/mysql/mysql-select-realizar-consultas-simples-em-tabelas-12/">consulta SQL</a> armazenada que define um conjunto de linhas e colunas que podem ser consultadas como se fossem uma tabela normal. Uma visualização não armazena dados próprios, mas é uma consulta pré-definida salva que pode ser usada para recuperar dados das tabelas subjacentes quando necessário.</p>
<p>Assim, atua como se fosse uma tabela comum aos olhos do usuário.</p>
<p>Uma visualização não ocupa espaço de armazenamento no banco de dados, por não armazenar nenhum dado em si, apenas referenciando os dados das tabelas que a constituem.</p>
<p>As views geralmente são usadas para simplificar consultas complexas, restringir o acesso a dados confidenciais ou fornecer uma exibição personalizada dos dados para diferentes usuários. São usadas da mesma forma que uma tabela qualquer é usada no banco de dados, ou seja, os dados podem ser consultados da mesma maneira que em uma tabela física real.</p>
<div id="attachment_18934" style="width: 360px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18934" class="wp-image-18934" title="Tabelas de banco de dados - visualização e materialized view" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/tabela-sql-visualizacao.png" alt="Tabelas de banco de dados - visualização e materialized view" width="350" height="350" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/tabela-sql-visualizacao.png 512w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/tabela-sql-visualizacao-170x170.png 170w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/tabela-sql-visualizacao-420x420.png 420w" sizes="auto, (max-width: 350px) 100vw, 350px" /><p id="caption-attachment-18934" class="wp-caption-text">View é uma tabela armazenada SQL</p></div>
<h3>Visualização Materializada SQL</h3>
<p>Por outro lado, uma <em><strong>materialized view</strong></em> (&#8220;<em>visualização materializada</em>&#8220;) é uma cópia <strong>física</strong> de uma view que fica armazenada no banco de dados.</p>
<p>É uma tabela pré-computada que contém os resultados de uma consulta realizada em uma ou mais tabelas no banco de dados.</p>
<p>Ao contrário de uma view, uma materialized view realmente armazena dados e pode ser usada para melhorar o desempenho da consulta, reduzindo a quantidade de computação necessária para recuperar os dados. As materialized views costumam ser usadas em aplicativos de armazenamento de dados e inteligência de negócios para armazenar dados de resumo cujo cálculo é custoso ou que são usados com frequência em relatórios.</p>
<p>Por conta disso, as visualizações materializadas consomem espaço de armazenamento no banco de dados, e devemos pensar com cuidado se realmente precisamos usar esse tipo de objeto para realizar consultas ou outras operações quaisquer nos dados.</p>
<h3>Conclusão</h3>
<p>Em resumo, a principal diferença entre uma view e uma materialized view é que uma view é uma tabela virtual derivada de uma ou mais tabelas em um banco de dados, enquanto uma materialized view é uma cópia física de uma visualização armazenada no banco de dados.</p>
<p>As views são normalmente usadas para simplificar consultas ou restringir o acesso aos dados, enquanto as materialized view são usadas para melhorar o desempenho da consulta e armazenar dados resumidos.</p>
<p>Uma visualização comum não ocupa espaço de armazenamento no banco de dados, ao passo que uma visualização materializada ocupa, e isso deve ser levado em consideração ao determinar que tipo de objeto será mais adequado para as nossas necessidades.</p>
<h3>Referências</h3>
<p>Plew, R.R.; Stephens, R.K. <em><strong>Aprenda em 24 horas SQL</strong></em>. 2ª edição. Editora Campus, ano 2000</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/qual-a-diferenca-entre-view-e-materialized-view-em-bancos-de-dados/">Qual a diferença entre View e Materialized View em Bancos de Dados?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/bancos-de-dados/qual-a-diferenca-entre-view-e-materialized-view-em-bancos-de-dados/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como desinstalar totalmente o MySQL Server do Linux Debian 11 bullseye</title>
		<link>https://www.bosontreinamentos.com.br/mysql/como-desinstalar-totalmente-o-mysql-server-do-linux-debian-11-bullseye/</link>
					<comments>https://www.bosontreinamentos.com.br/mysql/como-desinstalar-totalmente-o-mysql-server-do-linux-debian-11-bullseye/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 07 Mar 2023 11:52:57 +0000</pubDate>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18896</guid>

					<description><![CDATA[<p>Desinstalar totalmente o MySQL Server do Linux (Ubuntu, Debian, etc.) Uma tarefa comum ao realizar gerenciamento de um servidor é a desinstalação de pacotes ou serviços, um processo rápido e, normalmente, tranquilo. Porém, nem sempre uma remoção simples é efetiva, pois é comum que, ao remover um serviço do sistema, dependências não mais necessárias e arquivos de configuração ainda permaneçam no servidor, ocupando espaço em disco e, possivelmente, podendo vir a causar problemas caso o serviço precise ser reinstalado no futuro. Neste tutorial vou mostrar como desinstalar totalmente o MySQL Server do Linux Debian 11 &#8220;bullseye&#8221; e outras distros derivadas, como o Linux Mint e o Ubuntu. Desinstalação do MySQL do Linux Vamos aos passos necessários para realizar a desinstalação do MySQL Server do Linux Debian e derivados. 1. Parar o serviço do MySQL $ sudo systemctl stop mysql 2. Desinstalar os pacotes Aqui nós temos duas opções: a. Desinstalar todos os pacotes relacionados ao MySQL, incluindo o servidor, clientes, ferramentas, etc. (objetivo principal do tutorial): $ sudo apt purge mysql* b. Ou então podemos remover apenas o pacote do MySQL Server, mantendo os demais pacotes e configurações: $ sudo apt purge mysql-server 3. Remover dependências não mais utilizadas e [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-desinstalar-totalmente-o-mysql-server-do-linux-debian-11-bullseye/">Como desinstalar totalmente o MySQL Server do Linux Debian 11 bullseye</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Desinstalar totalmente o MySQL Server do Linux (Ubuntu, Debian, etc.)</h2>
<p>Uma tarefa comum ao realizar gerenciamento de um servidor é a desinstalação de pacotes ou serviços, um processo rápido e, normalmente, tranquilo. Porém, nem sempre uma remoção simples é efetiva, pois é comum que, ao remover um serviço do sistema, dependências não mais necessárias e arquivos de configuração ainda permaneçam no servidor, ocupando espaço em disco e, possivelmente, podendo vir a causar problemas caso o serviço precise ser reinstalado no futuro.</p>
<p>Neste tutorial vou mostrar como desinstalar totalmente o <a href="http://www.bosontreinamentos.com.br/curso-completo-de-mysql/">MySQL Server</a> do <a href="https://www.debian.org/" target="_blank" rel="noopener">Linux Debian 11 &#8220;bullseye&#8221;</a> e outras distros derivadas, como o Linux Mint e o Ubuntu.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-18900" title="Desinstalar MySQL do Linux" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/MySQL-Server-Logo-Linux-Debian.png" alt="Desinstalar MySQL do Linux" width="501" height="259" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/MySQL-Server-Logo-Linux-Debian.png 640w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/03/MySQL-Server-Logo-Linux-Debian-420x217.png 420w" sizes="auto, (max-width: 501px) 100vw, 501px" /></p>
<h3>Desinstalação do MySQL do Linux</h3>
<p>Vamos aos passos necessários para realizar a desinstalação do MySQL Server do Linux Debian e derivados.</p>
<h4>1. Parar o serviço do MySQL</h4>
<pre><strong>$ sudo systemctl stop mysql</strong></pre>
<h4>2. Desinstalar os pacotes</h4>
<p>Aqui nós temos duas opções:</p>
<p>a. Desinstalar todos os pacotes relacionados ao MySQL, incluindo o servidor, clientes, ferramentas, etc. (objetivo principal do tutorial):</p>
<pre><strong>$ sudo apt purge mysql*</strong></pre>
<p>b. Ou então podemos remover apenas o pacote do MySQL Server, mantendo os demais pacotes e configurações:</p>
<pre><strong>$ sudo apt purge mysql-server</strong></pre>
<h4>3. Remover dependências não mais utilizadas e limpar o cache</h4>
<pre><strong>$ sudo apt autoremove</strong>
<strong>$ sudo apt autoclean</strong></pre>
<p>Após a execução desses comandos, o MySQL estará desinstalado o sistema. Porém, existem alguns passos extras opcionais que podemos realizar, para evitar problemas em uma futura nova instalação do MySQL.</p>
<p>Apesar de opcionais, os passos a seguir são altamente recomendados.</p>
<h4>4. Remover as configurações do MySQL</h4>
<p>a. Remover os arquivos de configuração presentes no diretório <strong>/etc/mysql</strong>:</p>
<pre><strong>$ sudo rm -rf /etc/mysql</strong></pre>
<h4>5. Remover dados de bancos de dados</h4>
<p>a. Armazenamento de bancos de dados no diretório <strong>/var/lib/mysql</strong>:</p>
<pre><strong>$ sudo rm -rf /var/lib/mysql</strong></pre>
<h4>6. Verificar o resultado da remoção</h4>
<p>Por fim, verificamos se o mysql realmente foi eliminado do sistema:</p>
<pre><strong>dpkg -l | grep -i mysql</strong></pre>
<p>Após realizar todos os passos, recomendo reiniciar o servidor.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/mysql/como-desinstalar-totalmente-o-mysql-server-do-linux-debian-11-bullseye/">Como desinstalar totalmente o MySQL Server do Linux Debian 11 bullseye</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/mysql/como-desinstalar-totalmente-o-mysql-server-do-linux-debian-11-bullseye/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Comandos DML SQL e sua sintaxe</title>
		<link>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/</link>
					<comments>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 18 Nov 2022 19:53:14 +0000</pubDate>
				<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18677</guid>

					<description><![CDATA[<p>Comandos DML SQL e sua sintaxe No primeiro artigo da série sobre famílias de comandos SQL, estudamos os comandos DDL (Data Definition Language). Neste segundo artigo discuto os comandos SQL do grupo que chamamos de &#8220;comandos DML&#8221;, ou Data Manipulation Language (Linguagem de Manipulação de Dados), com a sintaxe das principais declarações e exemplos gerais. O que são comandos DML? Os comandos DML são declarações SQL para manipulação de dados em tabelas, o que inclui tarefas para inserção, atualização e exclusão de registros (linhas) em uma tabela. A tabela a seguir sumariza os comandos para manipulação de dados disponíveis em SQL: Declaração DML Descrição INSERT Cria um novo registro (linha) em uma tabela UPDATE Permite modificar registros em uma tabela DELETE Exclui um ou mais registros selecionados de uma tabela SELECT INTO Realiza uma consulta em uma tabela e inclui o resultado como um novo registro em outra tabela MERGE Combina dados de múltiplas tabelas, mesclando elementos das declarações INSERT e UPDATE. Vejamos a sintaxe e um exemplo de uso de algumas dessas declarações SQL. Comandos DML Declaração INSERT Este comando permite realizar a inserção de dados em uma tabela, por meio da criação de um novo registro. Vejamos sua sintaxe [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/">Comandos DML SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Comandos DML SQL e sua sintaxe</h2>
<p>No primeiro artigo da série sobre famílias de comandos SQL, estudamos os <a href="http://www.bosontreinamentos.com.br/bancos-de-dados/comandos-ddl-sql-e-sua-sintaxe/">comandos DDL (<em>Data Definition Language</em>)</a>. Neste segundo artigo discuto os comandos SQL do grupo que chamamos de &#8220;comandos DML&#8221;, ou <em><strong>Data Manipulation Language</strong></em> (Linguagem de Manipulação de Dados), com a sintaxe das principais declarações e exemplos gerais.</p>
<h3>O que são comandos DML?</h3>
<p>Os comandos DML são declarações SQL para manipulação de dados em tabelas, o que inclui tarefas para inserção, atualização e exclusão de registros (linhas) em uma tabela.</p>
<p>A tabela a seguir sumariza os comandos para manipulação de dados disponíveis em SQL:</p>
<table style="border-collapse: collapse; width: 94.8513%; height: 139px;" border="1">
<thead>
<tr>
<td style="width: 21.3725%; text-align: center;"><strong>Declaração DML</strong></td>
<td style="width: 78.6275%; text-align: center;"><strong>Descrição</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 21.3725%;">INSERT</td>
<td style="width: 78.6275%;">Cria um novo registro (linha) em uma tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">UPDATE</td>
<td style="width: 78.6275%;">Permite modificar registros em uma tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">DELETE</td>
<td style="width: 78.6275%;">Exclui um ou mais registros selecionados de uma tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">SELECT INTO</td>
<td style="width: 78.6275%;">Realiza uma consulta em uma tabela e inclui o resultado como um novo registro em outra tabela</td>
</tr>
<tr>
<td style="width: 21.3725%;">MERGE</td>
<td style="width: 78.6275%;">Combina dados de múltiplas tabelas, mesclando elementos das declarações INSERT e UPDATE.</td>
</tr>
</tbody>
</table>
<p>Vejamos a sintaxe e um exemplo de uso de algumas dessas declarações SQL.</p>
<div id="attachment_18684" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-18684" class="wp-image-18684 size-large" title="Comandos DML em bancos de dados relacionais" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-1024x471.png" alt="Comandos DML em bancos de dados relacionais" width="1024" height="471" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-1024x471.png 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-420x193.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson-768x353.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/11/comandos-dml-bancos-dados-boson.png 1198w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-18684" class="wp-caption-text">Comandos DML</p></div>
<h3>Declaração INSERT</h3>
<p>Este comando permite realizar a inserção de dados em uma tabela, por meio da criação de um novo registro.</p>
<p>Vejamos sua sintaxe geral e alguns exemplos.</p>
<h4>Sintaxe:</h4>
<pre><span style="color: #800080;"><strong>INSERT INTO nome_tabela(coluna1, coluna2, coluna3, ..., colunaN)</strong>
<strong>VALUES (valor1, valor2, valor3, ..., valorN);</strong></span></pre>
<p>Os valores são inseridos em cada coluna na ordem em que são discriminados na lista de valores em VALUES().</p>
<h4>Exemplo: Inserir dados na tabela de livros.</h4>
<pre><strong>INSERT INTO tbl_livros(Nome_Livro, Data_Pub, Preco_Livro, Genero, Autor, Editora)</strong>
<strong>VALUES</strong>
<strong>('Linux Command Line and Shell Scripting', '20150109', 68.35, 1, 5, 4),</strong>
<strong>('SSH, the Secure Shell', '20050517', 58.30, 1, 1, 2),</strong>
<strong>('Using Samba', '20031221', 61.45, 1, 2, 2),</strong>
<strong>('Practical Electronics for Inventors', '20160324', 67.80, 1, 13, 5);</strong></pre>
<h3>Declaração UPDATE</h3>
<p>Com a declaração UPDATE SQL podemos modificar o valor de uma ou mais colunas em um registro.</p>
<h4>Sintaxe</h4>
<pre><span style="color: #800080;"><strong>UPDATE tabela</strong></span>
<span style="color: #800080;"><strong>SET coluna(s) = novo_valor_armazenado</strong></span>
<span style="color: #800080;"><strong>WHERE coluna = valor_filtro;</strong></span></pre>
<p>Obs.: Se não for empregada a cláusula WHERE para filtrar os registros, TODOS os dados da coluna serão alterados para o mesmo valor!</p>
<h4>Exemplo</h4>
<p>Neste exemplo vamos alterar o nome de um livro na tabela tbl_livros, cujo ID é igual a 101, para &#8220;SSH, o Shell Seguro&#8221;:</p>
<pre><strong>UPDATE tbl_Livro</strong>
<strong>SET Nome_Livro = 'SSH, o Shell Seguro'</strong>
<strong>WHERE Id_Livro = 101;</strong></pre>
<h3>Declaração DELETE</h3>
<p>Com a cláusula DELETE podemos excluir registros específicos, indicados (filtrados) por meio de uma condição na cláusula WHERE</p>
<h4>Sintaxe</h4>
<pre><strong><span style="color: #800080;">DELETE FROM tabela</span></strong>
<strong><span style="color: #800080;">WHERE coluna = valor;</span></strong></pre>
<p>Obs.: Assim como acontece coma cláusula UPDATE, se não for empregada a cláusula WHERE para filtrar os registros, TODOS os dados da coluna serão afetados &#8211; no caso, excluídos para sempre! Cuidado!</p>
<h4>Exemplo</h4>
<p>Vamos excluir o autor da tabela de autores cujo id é igual a 5:</p>
<pre><strong>DELETE FROM tbl_autores</strong>
<strong>WHERE Id_Autor = 5;</strong></pre>
<h3>Declaração SELECT INTO</h3>
<p>Seleciona dados de uma ou mais tabelas e os insere em uma tabela diferente.</p>
<p>Pode ser usado, por exemplo, para criar cópias de backup de tabelas, ou ainda tabelas para relatório, contendo campos selecionados especialmente provenientes de várias tabelas distintas..</p>
<h4>Sintaxe</h4>
<pre><span style="color: #800080;"><strong>SELECT coluna(s)</strong></span>
<span style="color: #800080;"><strong>INTO nova_tabela</strong></span>
<span style="color: #800080;"><strong>FROM tabela_atual</strong></span>
<span style="color: #800080;"><strong>[WHERE campo = valor];</strong></span></pre>
<h4>Exemplo</h4>
<p>Criar uma tabela contendo somente os campos Nome_Livro e IdAutor, correspondentes aos livros cujo Id é maior do que 105:</p>
<pre><strong>SELECT Nome_Livro, IdAutor</strong>
<strong>INTO Livro_Autor</strong>
<strong>FROM tbl_livros</strong>
<strong>WHERE IdLivro &gt; 105;</strong></pre>
<p>É isso aí! No próximo artigo vamos explorar os comandos DQL (Data Query Language) em SQL.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/">Comandos DML SQL e sua sintaxe</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/bancos-de-dados/comandos-dml-sql-e-sua-sintaxe/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
