O que é um procedimento armazenado?

298

O que é um "procedimento armazenado" e como eles funcionam?

Qual é a composição de um procedimento armazenado (coisas que cada um deve ter que ser um procedimento armazenado)?

M--
fonte

Respostas:

243

Os procedimentos armazenados são um lote de instruções SQL que podem ser executadas de várias maneiras. A maioria dos DBMs principais suporta procedimentos armazenados; no entanto, nem todos fazem. Você precisará verificar com a documentação de ajuda do DBMS específica para detalhes. Como eu estou mais familiarizado com o SQL Server, usarei isso como meus exemplos.

Para criar um procedimento armazenado, a sintaxe é bastante simples:

CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

Então, por exemplo:

CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

    SELECT * from [Users]
    WHERE ISNULL(@login,login)=login

Um benefício dos procedimentos armazenados é que você pode centralizar a lógica de acesso a dados em um único local, facilitando a otimização dos DBAs. Os procedimentos armazenados também têm um benefício de segurança, pois você pode conceder direitos de execução a um procedimento armazenado, mas o usuário não precisará ter permissões de leitura / gravação nas tabelas subjacentes. Este é um bom primeiro passo contra a injeção de SQL.

Os procedimentos armazenados vêm com desvantagens, basicamente a manutenção associada à sua operação básica de CRUD . Digamos que para cada tabela você tenha uma inserção, atualização, exclusão e pelo menos uma seleção com base na chave primária, isso significa que cada tabela terá 4 procedimentos. Agora pegue um banco de dados de tamanho decente de 400 tabelas e você terá 1600 procedimentos! E isso assumindo que você não possui duplicatas, o que provavelmente terá.

É aqui que o uso de um ORM ou outro método para gerar automaticamente suas operações básicas de CRUD tem muito mérito.

JoshBerke
fonte
1
Você quer dizer Stored Procedure para ler dados e ORMgosta Entity Frameworkde fazer CRUDoperações?
shaijut
2
Sim, essa é uma abordagem possível. Usamos ORMs para tudo, mas relata
JoshBerke
Para mais detalhes sobre o procedimento armazenado você pode se referir a minha URL techflirt.com/mysql-stored-procedure-tutorial
Ankur Kumar Singh
150

Um procedimento armazenado é um conjunto de instruções SQL pré-compiladas usadas para executar uma tarefa especial.

Exemplo: se eu tiver uma Employeetabela

Employee ID  Name       Age  Mobile
---------------------------------------
001          Sidheswar  25   9938885469
002          Pritish    32   9178542436

Primeiro, estou recuperando a Employeetabela:

Create Procedure Employee details
As
Begin
    Select * from Employee
End

Para executar o procedimento no SQL Server:

Execute   Employee details

--- (Employee details is a user defined name, give a name as you want)

Em segundo lugar, estou inserindo o valor na tabela Employee

Create Procedure employee_insert
    (@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
    Insert Into Employee
    Values (@EmployeeID, @Name, @Age, @Mobile)
End

Para executar o procedimento parametrizado no SQL Server:

Execute employee_insert 003,’xyz’,27,1234567890

  --(Parameter size must be same as declared column size)

Exemplo: @Name Varchar(30)

Na Employeetabela, o Nametamanho da coluna deve ser varchar(30).

sidhewsar
fonte
1
exemplo que é fácil de entender
HaFiz Umer 22/09/19
80

Um procedimento armazenado é um grupo de instruções SQL que foram criadas e armazenadas no banco de dados. Um procedimento armazenado aceita parâmetros de entrada para que um único procedimento possa ser usado na rede por vários clientes usando dados de entrada diferentes. Os procedimentos armazenados reduzirão o tráfego da rede e aumentarão o desempenho. Se modificarmos um procedimento armazenado, todos os clientes receberão o procedimento armazenado atualizado.

Exemplo de criação de um procedimento armazenado

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

Vantagens de usar procedimentos armazenados

  • Um procedimento armazenado permite programação modular.

    Você pode criar o procedimento uma vez, armazená-lo no banco de dados e chamá-lo várias vezes no seu programa.

  • Um procedimento armazenado permite uma execução mais rápida.

    Se a operação exigir uma grande quantidade de código SQL que é executado repetidamente, os procedimentos armazenados podem ser mais rápidos. Eles são analisados ​​e otimizados quando são executados pela primeira vez, e uma versão compilada do procedimento armazenado permanece em um cache de memória para uso posterior. Isso significa que o procedimento armazenado não precisa ser reparado e re-otimizado a cada uso, resultando em tempos de execução muito mais rápidos.

  • Um procedimento armazenado pode reduzir o tráfego de rede.

    Uma operação que requer centenas de linhas do código Transact-SQL pode ser executada por meio de uma única instrução que executa o código em um procedimento, em vez de enviar centenas de linhas de código pela rede.

  • Procedimentos armazenados fornecem melhor segurança aos seus dados

    Os usuários podem receber permissão para executar um procedimento armazenado, mesmo que não tenham permissão para executar as instruções do procedimento diretamente.

    No SQL Server, temos diferentes tipos de procedimentos armazenados:

    • Procedimentos armazenados do sistema
    • Procedimentos armazenados definidos pelo usuário
    • Procedimentos armazenados estendidos
  • Os procedimentos armazenados no sistema são armazenados no banco de dados mestre e começam com um sp_prefixo. Esses procedimentos podem ser usados ​​para executar uma variedade de tarefas para oferecer suporte às funções do SQL Server para chamadas de aplicativos externos nas tabelas do sistema

    Exemplo: sp_helptext [StoredProcedure_Name]

  • Os procedimentos armazenados definidos pelo usuário geralmente são armazenados em um banco de dados do usuário e geralmente são projetados para concluir as tarefas no banco de dados do usuário. Embora a codificação desses procedimentos não use o sp_prefixo, porque se usarmos o sp_prefixo primeiro, ele verificará o banco de dados mestre e, em seguida, o banco de dados definido pelo usuário.

  • Procedimentos armazenados estendidos são os procedimentos que chamam funções de arquivos DLL. Atualmente, os procedimentos armazenados estendidos são descontinuados pelo motivo que seria melhor evitar o uso de procedimentos armazenados estendidos.

Kanwar Singh
fonte
37

Geralmente, um procedimento armazenado é uma "Função SQL". Eles têm:

-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID

Este é um exemplo focado em T-SQL. Os procedimentos armazenados podem executar a maioria das instruções SQL, retornar valores escalares e baseados em tabelas e são considerados mais seguros porque evitam ataques de injeção SQL.

Dave Swersky
fonte
16

Pense em uma situação como essa,

  • Você tem um banco de dados com dados.
  • Existem vários aplicativos diferentes necessários para acessar esse banco de dados central e, no futuro, alguns novos aplicativos também.
  • Se você deseja inserir as consultas em linha do banco de dados para acessar o banco de dados central, dentro do código de cada aplicativo individualmente, provavelmente você deve duplicar a mesma consulta novamente e novamente no código de diferentes aplicativos.
  • Nesse tipo de situação, você pode usar procedimentos armazenados (SPs). Com procedimentos armazenados, você está escrevendo um número de consultas (procedimentos) comuns e as armazena no banco de dados central.
  • Agora, a duplicação do trabalho nunca acontecerá como antes e o acesso aos dados e a manutenção serão feitos centralmente.

NOTA:

  • Na situação acima, você pode se perguntar "Por que não podemos introduzir um servidor central de acesso a dados para interagir com todos os aplicativos? Sim. Essa será uma alternativa possível. Mas,
  • A principal vantagem dos SPs em relação a essa abordagem é que, diferentemente do seu código de acesso a dados com consultas em linha, os SPs são instruções pré-compiladas, portanto, elas serão executadas mais rapidamente. E os custos de comunicação (através de redes) serão mínimos.
  • Ao contrário disso, os SPs adicionarão um pouco mais de carga ao servidor de banco de dados. Se isso for uma preocupação de acordo com a situação, um servidor centralizado de acesso a dados com consultas em linha será uma escolha melhor.
Supun Wijerathne
fonte
9

Um procedimento armazenado é usado principalmente para executar determinadas tarefas em um banco de dados. Por exemplo

  • Obtenha conjuntos de resultados do banco de dados de alguma lógica comercial nos dados.
  • Execute várias operações de banco de dados em uma única chamada.
  • Usado para migrar dados de uma tabela para outra tabela.
  • Pode ser chamado para outras linguagens de programação, como Java.
MAA
fonte
7

Um procedimento armazenado nada mais é do que um grupo de instruções SQL compiladas em um único plano de execução.

  1. Crie uma vez e chame-o n número de vezes
  2. Reduz o tráfego da rede

Exemplo: Criando um Procedimento Armazenado

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
      SET NOCOUNT ON;

      SELECT FirstName, LastName, BirthDate, City, Country
      FROM Employees 
      WHERE EmployeeID = @EmployeeID
END
GO

Altere ou modifique um procedimento armazenado:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
    SET NOCOUNT ON;

    SELECT FirstName, LastName, BirthDate, City, Country
    FROM Employees 
    WHERE EmployeeID = @EmployeeID
END
GO

Solte ou exclua um procedimento armazenado:

DROP PROCEDURE GetEmployee
user5723819
fonte
6

Um procedimento armazenado é usado para recuperar dados, modificar dados e excluir dados na tabela do banco de dados. Você não precisa escrever um comando SQL inteiro toda vez que desejar inserir, atualizar ou excluir dados em um banco de dados SQL.

venkat
fonte
4
  • Um procedimento armazenado é um conjunto pré-compilado de uma ou mais instruções SQL que executam alguma tarefa específica.

  • Um procedimento armazenado deve ser executado sozinho, usando EXEC

  • Um procedimento armazenado pode retornar vários parâmetros

  • Um procedimento armazenado pode ser usado para implementar transações

Kedarnath MS
fonte
4

"O que é um procedimento armazenado" já foi respondido em outras postagens aqui. O que vou postar é uma maneira menos conhecida de usar o procedimento armazenado. É grouping stored proceduresou numbering stored procedures.

Referência de sintaxe

insira a descrição da imagem aqui

; numberde acordo com isso

Um número inteiro opcional usado para agrupar procedimentos com o mesmo nome. Esses procedimentos agrupados podem ser descartados usando uma instrução DROP PROCEDURE

Exemplo

CREATE Procedure FirstTest 
(
    @InputA INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO

CREATE Procedure FirstTest;2
(
    @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

Usar

exec FirstTest 10
exec FirstTest;2 20,30

Resultado

insira a descrição da imagem aqui

Outra tentativa

CREATE Procedure SecondTest;2
(
     @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

Resultado

Msg 2730, Nível 11, Estado 1, Procedimento SecondTest, Linha 1 [Linha 3 de Lote Inicial] Não é possível criar o procedimento 'SecondTest' com um número de grupo 2 porque atualmente não existe um procedimento com o mesmo nome e um número de grupo 1 em o banco de dados. Deve executar CREATE PROCEDURE 'SecondTest'; 1 primeiro.

Referências :

  1. CRIAR PROCEDIMENTO com a sintaxe para número
  2. Procedimentos armazenados numerados no SQL Server - techie-friendly.blogspot.com
  3. Agrupando procedimentos armazenados - sqlmag

CUIDADO

  1. Depois de agrupar os procedimentos, você não pode descartá-los individualmente.
  2. Esse recurso pode ser removido em uma versão futura do Microsoft SQL Server.
Lijo
fonte
0

Um procedimento armazenado é uma coleção nomeada de instruções SQL e lógica processual, ou seja, compilada, verificada e armazenada no banco de dados do servidor. Um procedimento armazenado é normalmente tratado como outros objetos de banco de dados e controlado pelo mecanismo de segurança do servidor.

Nirmala Hansdak
fonte
0

Em um DBMS, um procedimento armazenado é um conjunto de instruções SQL com um nome atribuído armazenado no banco de dados na forma compilada, para que possa ser compartilhado por vários programas.

O uso de um procedimento armazenado pode ser útil para

  1. Fornecer um acesso controlado aos dados (os usuários finais podem apenas inserir ou alterar dados, mas não podem escrever procedimentos)

  2. Garantir a integridade dos dados (os dados seriam inseridos de maneira consistente) e

  3. Melhora a produtividade (as instruções de um procedimento armazenado precisam ser gravadas apenas uma vez)

Naina
fonte
0

para simples,

Procedimento armazenado são programas armazenados , Um programa / função armazenado no banco de dados.

Cada programa armazenado contém um corpo que consiste em uma instrução SQL. Essa declaração pode ser uma declaração composta composta por várias declarações separadas por caracteres de ponto e vírgula (;).

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
  SET @x = 0;
  REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
AZinkey
fonte
0

Os procedimentos armazenados no SQL Server podem aceitar parâmetros de entrada e retornar vários valores dos parâmetros de saída; no SQL Server, instruções de programa de procedimentos armazenados para executar operações no banco de dados e retornar um valor de status a um procedimento ou lote de chamada.

Os benefícios do uso de procedimentos armazenados no SQL Server

Eles permitem programação modular. Eles permitem uma execução mais rápida. Eles podem reduzir o tráfego de rede. Eles podem ser usados ​​como um mecanismo de segurança.

Aqui está um exemplo de um procedimento armazenado que aceita um parâmetro, executa uma consulta e retorna um resultado. Especificamente, o procedimento armazenado aceita o BusinessEntityID como um parâmetro e o usa para corresponder à chave primária da tabela HumanResources.Employee para retornar o funcionário solicitado.

> create procedure HumanResources.uspFindEmployee    `*<<<---Store procedure name`*
@businessEntityID                                     `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId,              <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId     <<<---parameter used as criteria
end

Aprendi isso com essential.com ... é muito útil.

Jerold Joel
fonte
0

O procedimento armazenado o ajudará a criar código no servidor. Você pode passar parâmetros e encontrar saída.

create procedure_name (para1 int,para2 decimal)
as
select * from TableName
Biddut
fonte
0

As instruções Em procedimentos armazenados são gravadas apenas uma vez e reduzem o tráfego de rede entre clientes e servidores. Também podemos evitar ataques de injeção de sql.

  • No caso de você estar usando um programa de terceiros em seu aplicativo para processar pagamentos, aqui o banco de dados deve expor apenas as informações necessárias e as atividades autorizadas por esse terceiro. Dessa forma, podemos obter confidencialidade dos dados definindo permissões usando Procedimentos Armazenados.
  • A atualização da tabela deve ser feita apenas na tabela que está sendo direcionada, mas não deve atualizar nenhuma outra tabela, pela qual podemos obter integridade de dados usando o processamento de transações e o tratamento de erros.
  • Se você deseja retornar um ou mais itens com um tipo de dados, é melhor usar um parâmetro de saída.
  • Em Procedimentos armazenados, usamos um parâmetro de saída para qualquer coisa que precise ser retornada. Se você deseja retornar apenas um item com apenas um tipo de dados inteiro, use melhor um valor de retorno. Na verdade, o valor de retorno é apenas para informar o sucesso ou falha do Procedimento Armazenado.
Abhishek Duppati
fonte