¿Qué es un procedimiento almacenado?

298

¿Qué es un "procedimiento almacenado" y cómo funcionan?

¿Cuál es la composición de un procedimiento almacenado (cada cosa debe ser un procedimiento almacenado)?

M--
fuente

Respuestas:

243

Los procedimientos almacenados son un lote de sentencias SQL que se pueden ejecutar de dos maneras. La mayoría de los DBM principales admiten procedimientos almacenados; Sin embargo, no todos lo hacen. Deberá verificar con su documentación de ayuda DBMS particular para obtener información específica. Como estoy más familiarizado con SQL Server, lo usaré como mis muestras.

Para crear un procedimiento almacenado, la sintaxis es bastante simple:

CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

Así por ejemplo:

CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

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

Una ventaja de los procedimientos almacenados es que puede centralizar la lógica de acceso a datos en un solo lugar que luego es fácil de optimizar para los DBA. Los procedimientos almacenados también tienen un beneficio de seguridad, ya que puede otorgar derechos de ejecución a un procedimiento almacenado, pero el usuario no necesitará tener permisos de lectura / escritura en las tablas subyacentes. Este es un buen primer paso contra la inyección SQL.

Los procedimientos almacenados tienen inconvenientes, básicamente el mantenimiento asociado con su operación CRUD básica . Digamos que para cada tabla tiene una inserción, actualización, eliminación y al menos una selección basada en la clave primaria, eso significa que cada tabla tendrá 4 procedimientos. ¡Ahora tome una base de datos de tamaño decente de 400 tablas, y tiene 1600 procedimientos! Y eso supone que no tienes duplicados, lo que probablemente tendrás.

Aquí es donde usar un ORM u otro método para generar automáticamente sus operaciones CRUD básicas tiene mucho mérito.

JoshBerke
fuente
1
¿Se refiere a un procedimiento almacenado de leer los datos y ORMgusta Entity Frameworkhacer CRUDoperaciones?
shaijut
2
Sí, ese es un enfoque posible. Usamos ORM para todo menos para informes
JoshBerke
Para obtener más detalles sobre el procedimiento almacenado, puede consultar mi URL techflirt.com/mysql-stored-procedure-tutorial
Ankur Kumar Singh
150

Un procedimiento almacenado es un conjunto de instrucciones SQL precompiladas que se utilizan para realizar una tarea especial.

Ejemplo: si tengo una Employeemesa

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

Primero estoy recuperando la Employeetabla:

Create Procedure Employee details
As
Begin
    Select * from Employee
End

Para ejecutar el procedimiento en SQL Server:

Execute   Employee details

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

Luego, segundo, estoy insertando el valor en la tabla de empleados

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 ejecutar el procedimiento parametrizado en SQL Server:

Execute employee_insert 003,’xyz’,27,1234567890

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

Ejemplo: @Name Varchar(30)

En la Employeetabla, el Nametamaño de la columna debe ser varchar(30).

sidhewsar
fuente
1
ejemplo así de fácil de entender
HaFiz Umer
80

Un procedimiento almacenado es un grupo de sentencias SQL que se han creado y almacenado en la base de datos. Un procedimiento almacenado aceptará parámetros de entrada para que varios clientes puedan utilizar un único procedimiento en la red utilizando diferentes datos de entrada. Un procedimiento almacenado reducirá el tráfico de red y aumentará el rendimiento. Si modificamos un procedimiento almacenado, todos los clientes obtendrán el procedimiento almacenado actualizado.

Muestra de crear un procedimiento almacenado

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

Ventajas de usar procedimientos almacenados

  • Un procedimiento almacenado permite la programación modular.

    Puede crear el procedimiento una vez, almacenarlo en la base de datos y llamarlo cualquier número de veces en su programa.

  • Un procedimiento almacenado permite una ejecución más rápida.

    Si la operación requiere una gran cantidad de código SQL que se realiza de forma repetitiva, los procedimientos almacenados pueden ser más rápidos. Se analizan y optimizan cuando se ejecutan por primera vez, y una versión compilada del procedimiento almacenado permanece en una memoria caché para su uso posterior. Esto significa que el procedimiento almacenado no necesita volver a analizarse y optimizarse con cada uso, lo que resulta en tiempos de ejecución mucho más rápidos.

  • Un procedimiento almacenado puede reducir el tráfico de red.

    Una operación que requiere cientos de líneas de código Transact-SQL se puede realizar a través de una sola instrucción que ejecuta el código en un procedimiento, en lugar de enviar cientos de líneas de código a través de la red.

  • Los procedimientos almacenados proporcionan una mejor seguridad a sus datos.

    Los usuarios pueden obtener permiso para ejecutar un procedimiento almacenado incluso si no tienen permiso para ejecutar las declaraciones del procedimiento directamente.

    En SQL Server tenemos diferentes tipos de procedimientos almacenados:

    • Procedimientos almacenados del sistema
    • Procedimientos almacenados definidos por el usuario
    • Procedimientos almacenados extendidos
  • Los procedimientos almacenados en el sistema se almacenan en la base de datos maestra y comienzan con un sp_prefijo. Estos procedimientos se pueden usar para realizar una variedad de tareas para admitir funciones de SQL Server para llamadas a aplicaciones externas en las tablas del sistema

    Ejemplo: sp_helptext [StoredProcedure_Name]

  • Los procedimientos almacenados definidos por el usuario generalmente se almacenan en una base de datos de usuarios y generalmente están diseñados para completar las tareas en la base de datos de usuarios. Mientras codifica estos procedimientos , no use el sp_prefijo porque si usamos el sp_prefijo primero, verificará la base de datos maestra y luego se trata de la base de datos definida por el usuario.

  • Los procedimientos almacenados extendidos son los procedimientos que llaman a funciones desde archivos DLL. Hoy en día, los procedimientos almacenados extendidos están en desuso por la razón por la cual sería mejor evitar el uso de procedimientos almacenados extendidos.

Kanwar Singh
fuente
37

En general, un procedimiento almacenado es una "Función SQL". Ellos tienen:

-- 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 es un ejemplo centrado en T-SQL. Los procedimientos almacenados pueden ejecutar la mayoría de las instrucciones SQL, devolver valores escalares y basados ​​en tablas, y se consideran más seguros porque evitan los ataques de inyección SQL.

Dave Swersky
fuente
16

Piensa en una situación como esta,

  • Tienes una base de datos con datos.
  • Se necesitan varias aplicaciones diferentes para acceder a esa base de datos central, y en el futuro también algunas aplicaciones nuevas.
  • Si va a insertar las consultas de la base de datos en línea para acceder a la base de datos central, dentro del código de cada aplicación individualmente, entonces probablemente tenga que duplicar la misma consulta una y otra vez dentro del código de diferentes aplicaciones.
  • En ese tipo de situación, puede usar procedimientos almacenados (SP). Con los procedimientos almacenados, está escribiendo varias consultas comunes (procedimientos) y las almacena en la base de datos central.
  • Ahora la duplicación del trabajo nunca sucederá como antes y el acceso a los datos y el mantenimiento se realizarán de forma centralizada.

NOTA:

  • En la situación anterior, puede preguntarse "¿Por qué no podemos introducir un servidor central de acceso a datos para interactuar con todas las aplicaciones? Sí. Esa será una posible alternativa. Pero,
  • La principal ventaja de los SP sobre ese enfoque es que, a diferencia de su código de acceso a datos con consultas en línea, los SP son declaraciones precompiladas, por lo que se ejecutarán más rápido. Y los costos de comunicación (a través de redes) serán mínimos.
  • Frente a eso, los SP agregarán algo más de carga al servidor de la base de datos. Si eso fuera una preocupación según la situación, un servidor de acceso a datos centralizado con consultas en línea será una mejor opción.
Supun Wijerathne
fuente
9

Un procedimiento almacenado se utiliza principalmente para realizar ciertas tareas en una base de datos. Por ejemplo

  • Obtenga conjuntos de resultados de la base de datos de cierta lógica empresarial en los datos.
  • Ejecute múltiples operaciones de base de datos en una sola llamada.
  • Se usa para migrar datos de una tabla a otra.
  • Se puede llamar para otros lenguajes de programación, como Java.
MAA
fuente
7

Un procedimiento almacenado no es más que un grupo de sentencias SQL compiladas en un solo plan de ejecución.

  1. Crea una vez y llámalo n veces
  2. Reduce el tráfico de la red.

Ejemplo: crear un procedimiento almacenado

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

Alterar o modificar un procedimiento almacenado:

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

Descartar o eliminar un procedimiento almacenado:

DROP PROCEDURE GetEmployee
usuario5723819
fuente
6

Un procedimiento almacenado se utiliza para recuperar datos, modificar datos y eliminar datos en la tabla de la base de datos. No necesita escribir un comando SQL completo cada vez que desee insertar, actualizar o eliminar datos en una base de datos SQL.

venkat
fuente
4
  • Un procedimiento almacenado es un conjunto precompilado de una o más instrucciones SQL que realizan alguna tarea específica.

  • Un procedimiento almacenado debe ejecutarse de forma independiente utilizando EXEC

  • Un procedimiento almacenado puede devolver múltiples parámetros

  • Se puede usar un procedimiento almacenado para implementar la transacción

Kedarnath MS
fuente
4

"Qué es un procedimiento almacenado" ya está respondido en otras publicaciones aquí. Lo que publicaré es una forma menos conocida de usar el procedimiento almacenado. Es grouping stored procedureso numbering stored procedures.

Referencia de sintaxis

ingrese la descripción de la imagen aquí

; numbersegún esto

Un entero opcional que se usa para agrupar procedimientos del mismo nombre. Estos procedimientos agrupados se pueden soltar mediante el uso de una instrucción DROP PROCEDURE

Ejemplo

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

Utilizar

exec FirstTest 10
exec FirstTest;2 20,30

Resultado

ingrese la descripción de la imagen aquí

Otro intento

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, Nivel 11, Estado 1, Procedimiento SecondTest, Línea 1 [Batch Start Line 3] No se puede crear el procedimiento 'SecondTest' con un número de grupo de 2 porque actualmente no existe un procedimiento con el mismo nombre y un número de grupo de 1 la base de datos. Debe ejecutar CREATE PROCEDURE 'SecondTest'; 1 primero.

referencias :

  1. CREAR PROCEDIMIENTO con la sintaxis para número
  2. Procedimientos almacenados numerados en SQL Server - techie-friendly.blogspot.com
  3. Agrupación de procedimientos almacenados - sqlmag

PRECAUCIÓN

  1. Después de agrupar los procedimientos, no puede soltarlos individualmente.
  2. Esta característica puede eliminarse en una versión futura de Microsoft SQL Server.
Lijo
fuente
0

Un procedimiento almacenado es una colección con nombre de sentencias SQL y lógica de procedimiento, es decir, compilada, verificada y almacenada en la base de datos del servidor. Un procedimiento almacenado generalmente se trata como otros objetos de la base de datos y se controla a través del mecanismo de seguridad del servidor.

Nirmala Hansdak
fuente
0

En un DBMS, un procedimiento almacenado es un conjunto de instrucciones SQL con un nombre asignado que se almacena en la base de datos en forma compilada para que varios programas puedan compartirlo.

El uso de un procedimiento almacenado puede ser útil en

  1. Proporcionar un acceso controlado a los datos (los usuarios finales solo pueden ingresar o cambiar datos, pero no pueden escribir procedimientos)

  2. Asegurar la integridad de los datos (los datos se ingresarían de manera consistente) y

  3. Mejora la productividad (las declaraciones de un procedimiento almacenado deben escribirse solo una vez)

Naina
fuente
0

por simple,

Los procedimientos almacenados son programas almacenados , un programa / función almacenado en la base de datos.

Cada programa almacenado contiene un cuerpo que consiste en una instrucción SQL. Esta declaración puede ser una declaración compuesta compuesta por varias declaraciones separadas por punto y coma (;).

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

Los procedimientos almacenados en SQL Server pueden aceptar parámetros de entrada y devolver múltiples valores de parámetros de salida; en SQL Server, las instrucciones del programa de procedimientos almacenados para realizar operaciones en la base de datos y devolver un valor de estado a un procedimiento o lote de llamada.

Los beneficios de usar procedimientos almacenados en SQL Server

Permiten programación modular. Permiten una ejecución más rápida. Pueden reducir el tráfico de red. Se pueden utilizar como mecanismo de seguridad.

Aquí hay un ejemplo de un procedimiento almacenado que toma un parámetro, ejecuta una consulta y devuelve un resultado. Específicamente, el procedimiento almacenado acepta el BusinessEntityID como parámetro y lo utiliza para que coincida con la clave principal de la tabla HumanResources.Employee para devolver el empleado 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

Aprendí esto de essential.com ... es muy útil.

Jerold Joel
fuente
0

El Procedimiento almacenado lo ayudará a crear código en el servidor. Puede pasar parámetros y buscar resultados.

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

En los procedimientos almacenados, las declaraciones se escriben solo una vez y reducen el tráfico de red entre clientes y servidores. También podemos evitar los ataques de inyección SQL.

  • En caso de que esté utilizando un programa de terceros en su solicitud para procesar pagos, aquí la base de datos solo debe exponer la información que necesita y la actividad que este tercero ha autorizado, por esto podemos lograr la confidencialidad de los datos estableciendo permisos usando Procedimientos almacenados.
  • La actualización de la tabla solo debe realizarse en la tabla a la que se dirige, pero no debe actualizar ninguna otra tabla, por lo que podemos lograr la integridad de los datos mediante el procesamiento de transacciones y el manejo de errores.
  • Si desea devolver uno o más elementos con un tipo de datos, es mejor utilizar un parámetro de salida.
  • En los procedimientos almacenados, utilizamos un parámetro de salida para cualquier cosa que deba devolverse. Si desea devolver solo un elemento con solo un tipo de datos entero, mejor utilice un valor de retorno. En realidad, el valor de retorno es solo para informar el éxito o el fracaso del Procedimiento almacenado.
Abhishek Duppati
fuente