<?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: Guilherme</title>
    <description>The latest articles on DEV Community by Guilherme (@gmontalbano).</description>
    <link>https://dev.to/gmontalbano</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%2F1204220%2Ff0741534-f2dc-4459-bd35-cd8adfdc15d5.jpg</url>
      <title>DEV Community: Guilherme</title>
      <link>https://dev.to/gmontalbano</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gmontalbano"/>
    <language>en</language>
    <item>
      <title>Tutorial: Utilizando Stored Procedures no Oracle</title>
      <dc:creator>Guilherme</dc:creator>
      <pubDate>Tue, 05 Dec 2023 20:05:54 +0000</pubDate>
      <link>https://dev.to/gmontalbano/tutorial-utilizando-stored-procedures-no-oracle-2lml</link>
      <guid>https://dev.to/gmontalbano/tutorial-utilizando-stored-procedures-no-oracle-2lml</guid>
      <description>&lt;p&gt;Uma Stored procedure é que um código SQL que salvamos para reutilizarmos várias vezes, então ao invés de escrevermos o mesmo código muitas vezes, nós apenas salvamos o código como uma stored procedure e chamamos ele para a execução quando for necessário. Para ter uma explicação mais detalhada visite &lt;a href="https://dev.to/gmontalbano/sql-stored-procedures-na-visao-de-um-estudante-3h5c"&gt;SQL Stored Procedures - Na visão de um estudante.red&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As Stored procedures oferecem uma série de vantagens sobre o código SQL tradicional. Elas podem melhorar o desempenho, a segurança e a reusabilidade do código.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criação de uma stored procedure
&lt;/h2&gt;

&lt;p&gt;Vamos para o passo a passo para criar uma stored procedure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;nome_da_procedure&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;lista_de_parametros&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="c1"&gt;-- Corpo da stored procedure&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A lista de parâmetros é opcional. Se não houver parâmetros, o bloco de código da stored procedure será executado diretamente.&lt;/p&gt;

&lt;p&gt;Os parâmetros podem ser passados para a stored procedure como IN, OUT ou IN OUT.&lt;/p&gt;

&lt;p&gt;IN - Os parâmetros IN são usados para passar valores para a stored procedure.&lt;/p&gt;

&lt;p&gt;OUT - Os parâmetros OUT são usados para retornar valores da stored procedure.&lt;/p&gt;

&lt;p&gt;IN OUT - Os parâmetros IN OUT podem ser usados para passar valores para a stored procedure e retornar valores dela&lt;/p&gt;

&lt;p&gt;Segue abaixo alguns exemplos na prática do uso de stored procedures:&lt;/p&gt;

&lt;h3&gt;
  
  
  Exemplo 1: Inserir um novo registro
&lt;/h3&gt;

&lt;p&gt;Criamos a procedure inserir_cliente que recebe 5 parametros e os insere na tabela clinte.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;insere_cliente&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;p_nome&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;p_cpf&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;p_endereco&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;p_cidade&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;p_estado&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;clientes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;endereco&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;estado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p_nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p_cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p_endereco&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p_cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p_estado&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Exemplo 2: Atualizar um registro existente
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;atualiza_cliente&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;p_id&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;p_nome&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;p_cpf&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;p_endereco&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;p_cidade&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;p_estado&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="n"&gt;clientes&lt;/span&gt;
  &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_nome&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;cpf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_cpf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;endereco&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_endereco&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;cidade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_cidade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;estado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_estado&lt;/span&gt;
  &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Exemplo 3: Excluir um registro
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;exclui_cliente&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;p_id&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="k"&gt;DELETE&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;clientes&lt;/span&gt;
  &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Exemplo 4: Realizar uma consulta
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQL
CREATE PROCEDURE consulta_clientes (
  p_nome IN VARCHAR2
)
AS
BEGIN
  SELECT *
  FROM clientes
  WHERE nome LIKE '%' || p_nome || '%';
END;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Exemplo 5: Calcular um valor
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;calcula_valor_total&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;p_id_venda&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="c1"&gt;-- Obtém os valores dos itens da venda&lt;/span&gt;
  &lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="n"&gt;qtd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;preco_unitario&lt;/span&gt;
  &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;itens_da_venda&lt;/span&gt;
  &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id_venda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_id_venda&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;-- Calcula o valor total da venda&lt;/span&gt;
  &lt;span class="n"&gt;v_valor_total&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="n"&gt;v_qtd_itens&lt;/span&gt; &lt;span class="n"&gt;LOOP&lt;/span&gt;
    &lt;span class="n"&gt;v_valor_total&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v_valor_total&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;v_qtd&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v_preco_unitario&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;END&lt;/span&gt; &lt;span class="n"&gt;LOOP&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;-- Retorna o valor total&lt;/span&gt;
  &lt;span class="k"&gt;RETURN&lt;/span&gt; &lt;span class="n"&gt;v_valor_total&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cenários e casos de uso
&lt;/h2&gt;

&lt;p&gt;Inserir, atualizar ou excluir dados de tabelas: Stored procedures podem ser usadas para automatizar tarefas comuns de gerenciamento de dados, como inserir novos registros, atualizar registros existentes ou excluir registros.&lt;/p&gt;

&lt;h4&gt;
  
  
  Alguns exemplos:
&lt;/h4&gt;

&lt;p&gt;Gerenciamento de dados: Automatizam tarefas comuns como inserir novos registros, atualizar registros existentes ou excluir registros. Por exemplo, podem ser usadas para inserir novos clientes em uma tabela de clientes ou atualizar os dados de um cliente existente.&lt;/p&gt;

&lt;p&gt;Realização de cálculos: Executam cálculos complexos, como calcular o valor total de uma venda ou o saldo de uma conta. Por exemplo, podem ser usadas para calcular o valor total de uma venda, somando o preço de cada item vendido.&lt;/p&gt;

&lt;p&gt;Execução de consultas: Realizam consultas complexas. Por exemplo, podem ser usadas para recuperar todos os clientes que moram em uma determinada cidade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exemplos de cenários e casos de uso
&lt;/h2&gt;

&lt;p&gt;Sistema de e-commerce: Uma stored procedure pode processar um pedido de compra, inserindo um novo registro na tabela de pedidos, atualizando os estoques dos produtos vendidos e enviando um e-mail ao cliente confirmando o pedido.&lt;/p&gt;

&lt;p&gt;Sistema de gerenciamento de recursos humanos: Uma stored procedure pode calcular o salário de um funcionário, considerando o salário base, as horas extras trabalhadas e os bônus recebidos.&lt;/p&gt;

&lt;p&gt;Sistema de gerenciamento de estoque: Uma stored procedure pode alertar os funcionários quando os níveis de estoque de um produto estiverem baixos, consultando a tabela de estoque para determinar os níveis de cada produto e enviando um e-mail aos funcionários quando os níveis de um produto estiverem abaixo de um determinado limite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vantagens das stored procedures
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Stored procedures possuem várias vantagens, como:
&lt;/h4&gt;

&lt;p&gt;Melhoria de desempenho: Elas são armazenadas e executadas diretamente pelo servidor do banco de dados, o que pode melhorar o desempenho do código.&lt;/p&gt;

&lt;p&gt;Aumento da segurança: Podem ser usadas para restringir o acesso a dados e recursos do banco de dados.&lt;/p&gt;

&lt;p&gt;Redução da complexidade: Agrupam tarefas relacionadas em um único lugar, tornando o código mais fácil de entender e manter.&lt;/p&gt;

&lt;h4&gt;
  
  
  No entanto, as stored procedures também têm desvantagens:
&lt;/h4&gt;

&lt;p&gt;Dependência do banco de dados: Elas são dependentes do banco de dados em que foram criadas, o que dificulta a portabilidade para outro banco de dados.&lt;/p&gt;

&lt;p&gt;Dificuldade de depuração: Podem ser difíceis de depurar, pois os erros podem ocorrer no servidor de banco de dados ou no cliente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Stored procedures é uma ferramenta poderosa que pode ser usada para automatizar tarefas comuns de gerenciamento de dados, realizar cálculos complexos e executar consultas complexas. Ela oferecem uma série de vantagens sobre o código SQL tradicional, incluindo melhor desempenho, segurança e reusabilidade.&lt;/p&gt;

&lt;p&gt;Esse post foi escrito para o trabalho da matéria de Gerenciamento de Banco de Dados, 6° Semestre de Eng. da computação, UNASP-SP.&lt;/p&gt;

&lt;p&gt;Alunos:&lt;/p&gt;

&lt;p&gt;Guilherme Montalbano&lt;br&gt;
Henrique Sartorti Soares&lt;br&gt;
Mateus Henrique&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>sql</category>
    </item>
    <item>
      <title>SQL Stored Procedures - Na visão de um estudante.</title>
      <dc:creator>Guilherme</dc:creator>
      <pubDate>Mon, 13 Nov 2023 15:16:56 +0000</pubDate>
      <link>https://dev.to/gmontalbano/sql-stored-procedures-na-visao-de-um-estudante-3h5c</link>
      <guid>https://dev.to/gmontalbano/sql-stored-procedures-na-visao-de-um-estudante-3h5c</guid>
      <description>&lt;p&gt;Neste post falaremos sobre SQL Stored Procedure. Descreveremos sobre sua sintaxe, vantagens e desvantagens e suas aplicações no mercado e etc.&lt;/p&gt;

&lt;p&gt;Primeiramente devemos começar entendendo o que é Stored Procedure. Uma Stored procedure nada mais é que um código SQL que nós salvamos para reutilizarmos várias vezes, então ao invés de escrevermos o mesmo código diversas vezes, nós apenas salvamos o código como uma stored procedure e chamamos ele para a execução.&lt;/p&gt;




&lt;h2&gt;
  
  
  A sintaxe:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;nome_da_procedure&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="c1"&gt;-- SQL statements go here&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt; &lt;span class="n"&gt;nome_da_procedure&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E para executarmos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;EXECUTE&lt;/span&gt; &lt;span class="n"&gt;my_procedure&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Dados para exemplo:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CustomerID&lt;/th&gt;
&lt;th&gt;CustomerName&lt;/th&gt;
&lt;th&gt;ContactName&lt;/th&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;th&gt;City&lt;/th&gt;
&lt;th&gt;PostalCode&lt;/th&gt;
&lt;th&gt;Country&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Joaquim Cordeiro&lt;/td&gt;
&lt;td&gt;Joaquim&lt;/td&gt;
&lt;td&gt;Avenida Esbertalina Barbos 84&lt;/td&gt;
&lt;td&gt;São Mateus&lt;/td&gt;
&lt;td&gt;29946490&lt;/td&gt;
&lt;td&gt;Brazil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Gabriel Miranda&lt;/td&gt;
&lt;td&gt;Gabriel&lt;/td&gt;
&lt;td&gt;Avenida Governador José 1209&lt;/td&gt;
&lt;td&gt;Belém&lt;/td&gt;
&lt;td&gt;66055260&lt;/td&gt;
&lt;td&gt;Brazil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Celina Duarte Serrano&lt;/td&gt;
&lt;td&gt;Celina&lt;/td&gt;
&lt;td&gt;Rua da Imprensa 395&lt;/td&gt;
&lt;td&gt;Campo Grande&lt;/td&gt;
&lt;td&gt;79002290&lt;/td&gt;
&lt;td&gt;Brazil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Barbara Raiane Faro&lt;/td&gt;
&lt;td&gt;Barbara&lt;/td&gt;
&lt;td&gt;Rua Maria Luísa do Val Penteado 9952&lt;/td&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;03962040&lt;/td&gt;
&lt;td&gt;Brazil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Breno Casanova Borba&lt;/td&gt;
&lt;td&gt;Breno Borba&lt;/td&gt;
&lt;td&gt;Avenida Afonso Pena 100&lt;/td&gt;
&lt;td&gt;Belo Horizonte&lt;/td&gt;
&lt;td&gt;30130005&lt;/td&gt;
&lt;td&gt;Brazil&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Exemplo:
&lt;/h2&gt;

&lt;p&gt;O Exemplo a seguir cira uma stored procedure com o nome de "SelectALLCustomers" que seleciona todos os registros na tabela "Custumers":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;SelectAllCustomers&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Customers&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt; &lt;span class="n"&gt;SelectAllCustomers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E para sua execução:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;  &lt;span class="k"&gt;EXECUTE&lt;/span&gt; &lt;span class="n"&gt;SelectALLCustomers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora com a procedure funcionando toda vez que você precisar selecionar todos os clientes, basta chamar a procedure. Isso nos ajuda com tempo e redundância no código.&lt;br&gt;
Este foi um exemplo simples, mas podemos criar Stored Procedures para executar tarefas mais complexas e ou especificas, como calculos ou atualização de dados.&lt;/p&gt;


&lt;h2&gt;
  
  
  Parâmetros (IN/OUT):
&lt;/h2&gt;

&lt;p&gt;Stored Procedures também podem aceitar parametros para sua execução, podemos usar parâmetros para receber os valores da parte que chama a Stored Procedure (ENTRAS/IN) ou para retornar os valores para quem chamou (SAÍDA/OUT)&lt;br&gt;
Aqui está um exemplo utilizando um parametro.&lt;br&gt;
A Stored Procedure a seguir seleciona na tabela "Customers" o cliente de apenas um país especifico, que será passado como parametro.&lt;/p&gt;
&lt;h3&gt;
  
  
  Parametros de Entrada (IN):
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;SelectAllCustomers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;country&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Customers&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;Country&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt; &lt;span class="n"&gt;SelectAllCustomers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;E sua execução passa o país Brasil como parametro para seleção:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;EXECUTE&lt;/span&gt;  &lt;span class="n"&gt;SelectAllCustomers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Brasil'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Parametros de Saída(OUT):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;multiplica_por_2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valor_entrada&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;valor_saida&lt;/span&gt; &lt;span class="k"&gt;OUT&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="n"&gt;valor_saida&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;valor_entrada&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;-- Calcula e define o valor de saída&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt; &lt;span class="n"&gt;multiplica_por_2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando a Procedure for chamada, forneceremos o tanto a variável de entrada quanto a de saída:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;DECLARE&lt;/span&gt;
  &lt;span class="n"&gt;valor_entrada&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;valor_saida&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;EXECUTE&lt;/span&gt; &lt;span class="n"&gt;multiplica_por_2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valor_entrada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;valor_saida&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;DBMS_OUTPUT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PUT_LINE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Valor de entrada: '&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;valor_entrada&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;DBMS_OUTPUT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PUT_LINE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Valor de saída: '&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;valor_saida&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim chamamos com o valor_entrada como parâmetro de entrada, e valor_saida como parâmetro de saída, após sua execução o valor de saída ira possuir o valor do valor_entrada * 2.&lt;/p&gt;




&lt;h2&gt;
  
  
  Vantagens e desvantagens:
&lt;/h2&gt;

&lt;p&gt;Temos diversas vantagens utilizando as Stored Procedures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Possuí facilidade de uso pois é possível criamos uma vez e depois pode ser implementado em qualquer parte do código ou programa, digamos que temos um site e que ele precisa calular e retornar o total do pedido com base nos itens do carrinho de compras, para isso podemos criar uma procedure para realizar o calculo e toda vez que qualquer parte do nosso site seja adicionado ao carrinho de compras, apenas chamamos a procedure para o calcular o preço total do carrinho.&lt;/li&gt;
&lt;li&gt;Melhor desempenho e agilidade, chamando procedures, elas são mais rápidas e mais eficientes pois elas são armazenadas e compiladas apenas uma vez. Sendo assim seu tempo de resposta é muito mais rapido, em bancos que possuem uma grande escala, podemos encontrar momentos em que várias partes da aplicação precisam acessar e utilizar os mesmos dados. Ao usar as Stored Procedures para realizar operações mais comuns, você irá melhorar o desempenho do seu banco de dados, levando em conta que o código da Stored Procedure é compilado e armazenado em cache, reduzindo assim a necessidade de compilar novamente.&lt;/li&gt;
&lt;li&gt;Segurança, no caso de acesso de dados restritos, quando definido o provilédio da stored procedure, o usuário pode manipular dados utilizando ela tranquilamente e seguindo 100% a query pré definidada. Por exemplo, possiuimos um sistema de gerenciamento de clubes em que os registros de desbravadores são armazenados. Com Stored Procedures, podemos garantir que apenas as Stored Procedures específicas podem acessar e manipular esses registros, proporcionando um nível adicional de segurança para os dados sensíveis dos desbravadores integrantes do clube.&lt;/li&gt;
&lt;li&gt;Manutenção,  Em um ambiente de desenvolvimento colaborativo, onde vários desenvolvedores trabalham em um aplicativo ou site, se uma parte da lógica de negócios for implementada em Stored Procedures, as atualizações ou correções necessárias podem ser feitas na Stored Procedure central. Dessa forma, todas as partes do aplicativo que utilizam ela se beneficiam das alterações sem a necessidade de modificar código em várias partes do aplicativo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo de manutenção:&lt;/p&gt;

&lt;p&gt;Aqui alteramos a seleção de cidade para selecionarmos o país.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;SelectAllCustomers&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p_country&lt;/span&gt; &lt;span class="n"&gt;VARCHAR2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Customers&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;Country&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_country&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt; &lt;span class="n"&gt;SelectAllCustomers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="k"&gt;EXECUTE&lt;/span&gt; &lt;span class="n"&gt;SelectAllCustomers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Brasil'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos também desvantagem de sua utilização.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Testes, no cenário do mundo real, quando ocorre um erro em uma Stored Procedure, os erros não são sempre detectados até o tempo de execução. Isso pode dificultar a detecção e correção de problemas ou incidentes (BUGS), tornando o processo de teste e depuração mais complicados.&lt;/li&gt;
&lt;li&gt;Portabilidade: As stored procedures não são sempre portáveis entre diferentes sistemas de gerenciamento de banco de dados (SGBD). Isso pode limitar a flexibilidade se você precisar realizar uma migration para um outro SGBD diferente no futuro.&lt;/li&gt;
&lt;li&gt;Versionamento: Gerenciar as versões das stored procedures pode ser complicado, especialmente em um ambiente de desenvolvimento colaborativo. Mudanças nas stored procedures podem afetar outras partes da aplicação.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Exemplos de uso:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cálculo do preço do carrinho:
&lt;/h3&gt;

&lt;p&gt;Em um sistema de comércio eletrônico, você pode criar uma Stored Procedure para calcular o preço total de um pedido com base nos itens do carrinho de compras. Isso pode ser útil em várias partes da aplicação, seja como ao exibir o resumo do pedido para o cliente ou ao processar o pagamento. Abaixo segue o exemplo de uma Stored Procedure para esse caso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;CalculateTotalPrice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;orderID&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt;
  &lt;span class="n"&gt;totalPrice&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="c1"&gt;-- Calcula o preço total com base nos itens do pedido&lt;/span&gt;
  &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;Quantity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;totalPrice&lt;/span&gt;
  &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;OrderItems&lt;/span&gt;
  &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;OrderID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orderID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;-- Atualiza o preço total no pedido&lt;/span&gt;
  &lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="n"&gt;Orders&lt;/span&gt;
  &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;TotalPrice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;totalPrice&lt;/span&gt;
  &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;OrderID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;orderID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;COMMIT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;-- Confirma a transação&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt; &lt;span class="n"&gt;CalculateTotalPrice&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, a Stored Procedure CalculateTotalPrice aceita o orderID como parâmetro e calcula o preço total com base nos itens do pedido. Isso pode ser chamado sempre que um item for adicionado ou removido do carrinho.&lt;/p&gt;

&lt;h3&gt;
  
  
  Registro de Histórico de Pedidos:
&lt;/h3&gt;

&lt;p&gt;Podemos criar uma Stored Procedure para registrar detalhes do pedido em uma tabela de histórico sempre que um pedido for concluido. Isso mantém um registro completo dos pedidos feitos pelos clientes. Veja um exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;RecordOrderHistory&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;orderID&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;orderDate&lt;/span&gt; &lt;span class="nb"&gt;DATETIME&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;OrderHistory&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OrderID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OrderDate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;orderID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;orderDate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Completed'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, a Stored Procedure RecordOrderHistory registra os detalhes do pedido, como o ID do pedido, a data do pedido e o status "Concluído", na tabela de histórico sempre que um pedido é concluído com sucesso.&lt;/p&gt;




&lt;p&gt;Após o desenvolvimento e leitura desse post chegamos a conclusão que utilizar Stored Procedures pode ser uma grande vantagem se souber utilizá-la, sendo por segurança de código ou como citado na aplicação, se dois serviços precisam da mesma query ao invés de desenvolver duas querys diferentes ambos consultam na mesma Stored Procedure, vimos que em grande parte sua manutenção é fácil, pois alteramos diretamente seu código e não precisamos passar em diferentes partes dos códigos fazendo ajustes, e em nossa conclusão mesmo que existam desvantagens em seu uso se utilizada corretamente temos maior ganho de desempenho.&lt;/p&gt;

&lt;p&gt;Esse post foi escrito para o trabalho da matéria de Gerenciamento de Banco de Dados, 6° Semestre de Eng. da computação, UNASP-SP.&lt;/p&gt;




&lt;p&gt;Alunos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Guilherme Montalbano&lt;/li&gt;
&lt;li&gt;Henrique Sartorti Soares&lt;/li&gt;
&lt;li&gt;Mateus Henrique&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Referências:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.oracletutorial.com/plsql-tutorial/plsql-procedure/"&gt;Oracle Tutorial - Procedure&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.w3schools.com/sql/sql_stored_procedures.asp"&gt;w3schools - Stored procedures&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
