<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: JOAO GABRIEL SANTOS NEVES</title>
    <description>The latest articles on DEV Community by JOAO GABRIEL SANTOS NEVES (@jgsneves).</description>
    <link>https://dev.to/jgsneves</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1220086%2F892c6a4d-b60e-44e4-8cb6-ab794122eb37.png</url>
      <title>DEV Community: JOAO GABRIEL SANTOS NEVES</title>
      <link>https://dev.to/jgsneves</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jgsneves"/>
    <language>en</language>
    <item>
      <title>[PT-BR] SQL Server Procedures</title>
      <dc:creator>JOAO GABRIEL SANTOS NEVES</dc:creator>
      <pubDate>Tue, 28 Nov 2023 18:04:14 +0000</pubDate>
      <link>https://dev.to/jgsneves/pt-br-sql-server-procedures-2glc</link>
      <guid>https://dev.to/jgsneves/pt-br-sql-server-procedures-2glc</guid>
      <description>&lt;h1&gt;
  
  
  Pré-requisitos
&lt;/h1&gt;

&lt;p&gt;Antes de mergulhar neste artigo, é necessário conhecer os seguintes conceitos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Você precisa saber o que é um sistema de banco de dados.&lt;/li&gt;
&lt;li&gt;Você precisa saber o que é uma procedure de banco de dados.&lt;/li&gt;
&lt;li&gt;Você precisa estar ciente de que as procedures armazenadas podem variar entre os sistemas de banco de dados que você escolher.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  O que é um sistema de banco de dados?
&lt;/h2&gt;

&lt;p&gt;Um sistema de banco de dados é uma solução de software que gerencia, organiza e fornece acesso a dados. Ele é projetado para armazenar, recuperar e manipular eficientemente grandes volumes de dados, garantindo integridade, segurança e controle de concorrência dos dados. Um sistema de banco de dados normalmente inclui um sistema de gerenciamento de banco de dados (SGBD) e os próprios dados.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é uma procedure?
&lt;/h2&gt;

&lt;p&gt;Procedures (às vezes chamados de Procedimentos Armazenados ou Procs) são sub-rotinas que podem conter uma ou mais instruções SQL que realizam uma tarefa específica. Elas podem ser usadas para validação de dados, controle de acesso ou para reduzir o tráfego de rede entre clientes e servidores de SGBD. Lógica de negócios extensa e complexa pode ser incorporada na sub-rotina, oferecendo assim melhor desempenho.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diferenças entre stored procedures no MySQL, PostgreSQL e SQL Server
&lt;/h2&gt;

&lt;p&gt;Embora todos eles suportem procedimentos armazenados como uma maneira de encapsular e executar uma série de instruções SQL, há variações na sintaxe, recursos e funcionalidades. Aqui estão alguns pontos-chave de diferença:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Diferenças de Sintaxe:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.1   SQL Server usa Transact-SQL (T-SQL) para stored procedures.&lt;br&gt;
1.2 O MySQL usa sua própria linguagem procedural conhecida como MySQL Stored Procedure Language.&lt;br&gt;
1.3 O PostgreSQL usa PL/pgSQL como sua linguagem procedural.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recursos de Linguagem Procedural:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;2.1 O T-SQL do SQL Server oferece um conjunto rico de recursos de programação procedural, incluindo construções de controle de fluxo, tratamento de erros e gerenciamento de transações.&lt;br&gt;
2.2 A linguagem de procedimento armazenado do MySQL é semelhante ao T-SQL, mas pode ter algumas diferenças sintáticas e um conjunto ligeiramente diferente de recursos.&lt;br&gt;
2.3 O PL/pgSQL do PostgreSQL é uma linguagem versátil e poderosa, semelhante ao PL/SQL no Oracle, e fornece recursos como loops, declarações condicionais e tratamento de exceções.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Transaction Management:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;3.1 O tratamento de transações pode ter diferenças sutis. Por exemplo, a maneira como as transações são iniciadas, confirmadas ou revertidas pode variar.&lt;br&gt;
3.2 O SQL Server frequentemente usa instruções &lt;code&gt;BEGIN TRANSACTION&lt;/code&gt;, &lt;code&gt;COMMIT&lt;/code&gt; e &lt;code&gt;ROLLBACK&lt;/code&gt;.&lt;br&gt;
3.3 MySQL e PostgreSQL têm seus equivalentes, mas a sintaxe e o comportamento podem diferir.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Error Handling:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;4.1 O SQL Server fornece blocos &lt;code&gt;TRY...CATCH&lt;/code&gt; para tratamento estruturado de erros.&lt;br&gt;
4.2 O MySQL usa &lt;code&gt;DECLARE ... HANDLER&lt;/code&gt; para manipulação de exceções.&lt;br&gt;
4.3 O PostgreSQL possui blocos &lt;code&gt;EXCEPTION&lt;/code&gt; para tratamento de erros.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Suporte a Recursos Avançados:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cada sistema de banco de dados pode ter seu próprio conjunto de recursos avançados e extensões para procedimentos armazenados. Por exemplo, o PostgreSQL suporta várias linguagens além do PL/pgSQL, permitindo o uso de linguagens como PL/Python, PL/Perl, etc., para procedimentos armazenados.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Modelo de Segurança:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Os modelos de segurança para procedimentos armazenados podem ser diferentes. O SQL Server, por exemplo, integra-se à autenticação do Windows, enquanto o MySQL e o PostgreSQL geralmente dependem de seus sistemas de gerenciamento de usuários.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Ferramentas e Gerenciamento:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As ferramentas disponíveis para desenvolver, gerenciar e depurar procedimentos armazenados podem variar entre os sistemas de banco de dados. O SQL Server possui o SQL Server Management Studio (SSMS), o MySQL usa ferramentas como o MySQL Workbench, e o PostgreSQL possui ferramentas como o pgAdmin.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Compatibilidade:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A portabilidade de procedimentos armazenados entre esses bancos de dados pode ser limitada devido a diferenças na sintaxe e nos recursos. Se você planeja mudar de sistema de banco de dados, pode ser necessário modificar seus procedimentos armazenados de acordo.&lt;/p&gt;

&lt;h1&gt;
  
  
  Qual é a motivação por trás do uso de procedimentos de banco de dados?
&lt;/h1&gt;

&lt;p&gt;Procedures de banco de dados são uma boa feature para encapsular lógica de negócios, validar campos e proteger seus dados. No entanto, na minha opinião, eu nunca os usaria para alcançar esses objetivos. A melhor maneira de fazer essas coisas é usar uma API, onde você pode encapsulá-las.&lt;/p&gt;

&lt;p&gt;Prefiro usar procedimentos para obter informações sobre as entidades do banco de dados, como tabelas, usuários e índices.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tabela
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stored Procedure&lt;/th&gt;
&lt;th&gt;Descrição&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_help&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fornece informações sobre um banco de dados, uma tabela, uma visualização ou um índice.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_who&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exibe informações sobre usuários e processos atuais.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_configure&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exibe ou altera configurações globais.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_who2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Semelhante a sp_who, mas fornece informações mais detalhadas.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_spaceused&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exibe a quantidade de espaço usado e reservado por uma tabela.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_rename&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Renomeia um objeto criado pelo usuário no banco de dados atual.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_helptext&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exibe a definição de uma regra, padrão ou trigger definido pelo usuário.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_adduser&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adiciona uma nova conta de login do SQL Server.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_addlogin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adiciona um novo login para o SQL Server.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_helpindex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exibe informações sobre índices em uma tabela.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_depends&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exibe informações sobre dependências de um objeto.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_helpconstraint&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exibe informações sobre as constraints de uma table.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Usabilidade
&lt;/h1&gt;

&lt;p&gt;Em uma query SQL, você pode rodar o comando abaixo e recuperar a information de uma tabela, por exemplo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;exec sp_help 'table_name'&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>SQL Server Procedures Cheat Sheet</title>
      <dc:creator>JOAO GABRIEL SANTOS NEVES</dc:creator>
      <pubDate>Tue, 28 Nov 2023 17:42:15 +0000</pubDate>
      <link>https://dev.to/jgsneves/sql-server-procedures-cheat-sheet-217o</link>
      <guid>https://dev.to/jgsneves/sql-server-procedures-cheat-sheet-217o</guid>
      <description>&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;

&lt;p&gt;First of all, you need to know those concepts before diving into this article:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You gotta know what's a database system&lt;/li&gt;
&lt;li&gt;You gotta know what's a database procedure&lt;/li&gt;
&lt;li&gt;You gotta know that stored procedures may vary between database systems you choose&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What's a database system
&lt;/h2&gt;

&lt;p&gt;A database system is a software solution that manages, organizes, and provides access to data. It is designed to efficiently store, retrieve, and manipulate large volumes of data while ensuring data integrity, security, and concurrency control. A database system typically includes a database management system (DBMS) and the data itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's a procedure
&lt;/h2&gt;

&lt;p&gt;Database Procedures (sometimes referred to as Stored Procedures or Procs) are subroutines that can contain one or more SQL statements that perform a specific task. They can be used for data validation, access control, or to reduce network traffic between clients and the DBMS servers. Extensive and complex business logic can be embedded into the subroutine, thereby offering better performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Differences between MySQL, PostgreSQL and SQL Server stored procedures
&lt;/h2&gt;

&lt;p&gt;They all support stored procedures as a way to encapsulate and execute a series of SQL statements, there are variations in syntax, features, and functionality. Here are some key points of difference:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Syntax Differences:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.1   SQL Server uses Transact-SQL (T-SQL) for stored procedures.&lt;br&gt;
1.2 MySQL uses its own procedural language known as MySQL Stored Procedure Language.&lt;br&gt;
1.3 PostgreSQL uses PL/pgSQL as its procedural language.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Procedural Language Features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;2.1  SQL Server's T-SQL offers a rich set of procedural programming features, including control-of-flow constructs, error handling, and transaction management.&lt;br&gt;
2.2 MySQL's stored procedure language is similar to T-SQL but may have some syntactic differences and a slightly different set of features.&lt;br&gt;
2.3  PostgreSQL's PL/pgSQL is a versatile and powerful language, similar to PL/SQL in Oracle, and provides features like loops, conditional statements, and exception handling.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Transaction Management:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;3.1   Transaction handling may have subtle differences. For example, the way transactions are started, committed, or rolled back can vary.&lt;br&gt;
3.2  SQL Server often uses &lt;code&gt;BEGIN TRANSACTION&lt;/code&gt;, &lt;code&gt;COMMIT&lt;/code&gt;, and &lt;code&gt;ROLLBACK&lt;/code&gt; statements.&lt;br&gt;
3.3  MySQL and PostgreSQL have their own equivalents, but the syntax and behavior might differ.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Error Handling:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;4.1  SQL Server provides &lt;code&gt;TRY...CATCH&lt;/code&gt; blocks for structured error handling.&lt;br&gt;
4.2  MySQL uses &lt;code&gt;DECLARE ... HANDLER&lt;/code&gt; for handling exceptions.&lt;br&gt;
4.3  PostgreSQL has &lt;code&gt;EXCEPTION&lt;/code&gt; blocks for error handling.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Support for Advanced Features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each database system may have its own set of advanced features and extensions for stored procedures. For example, PostgreSQL supports various languages beyond PL/pgSQL, allowing you to use languages like PL/Python, PL/Perl, etc., for stored procedures.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Security Model:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Security models for stored procedures can differ. SQL Server, for instance, integrates with Windows authentication, whereas MySQL and PostgreSQL often rely on their user management systems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tooling and Management:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The tools available for developing, managing, and debugging stored procedures can vary between database systems. SQL Server has SQL Server Management Studio (SSMS), MySQL uses tools like MySQL Workbench, and PostgreSQL has tools like pgAdmin.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Portability of stored procedures between these databases may be limited due to differences in syntax and features. If you plan to switch database systems, you might need to modify your stored procedures accordingly.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  What's the motivation behind using database procedures?
&lt;/h1&gt;

&lt;p&gt;Database procedures are a good feature to encapsulate business logic, validate fields, and secure your data. Nevertheless, in my opinion, I would never use procedures to achieve those goals. The best way to do those things is to use an API, where you can encapsulate them.&lt;/p&gt;

&lt;p&gt;I prefer to use procedures to retrive some informations about the database entities, like tables, users and indexes.&lt;/p&gt;

&lt;p&gt;For exemple, you could be curious about some scheme details or a table's columns data types.&lt;/p&gt;

&lt;h1&gt;
  
  
  Cheat Sheet
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stored Procedure&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_help&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Provides information about a database, a table, a view, or an index.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_who&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displays information about current users and processes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_configure&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displays or changes global configuration settings.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_who2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Similar to sp_who but provides more detailed information.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_spaceused&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displays the amount of space used and reserved by a table.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_rename&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Renames a user-created object in the current database.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_helptext&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displays the definition of a user-defined rule, default, or trigger.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_adduser&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adds a new SQL Server login account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_addlogin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adds a new login for SQL Server.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_helpindex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displays information about indexes on a table.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_depends&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displays information about object dependencies.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sp_helpconstraint&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displays information about the constraints on a table.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Usage
&lt;/h1&gt;

&lt;p&gt;Into a SQL query, you can run this command to check a table information:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;exec sp_help 'table_name'&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
