---
title: "¿Cómo usar Parámetros en Stored Procedures?"
slug: "how-to-use-parameters-in-stored-procedures"
published_at: "2022-10-15T16:55:59.000Z"
categories: "SQL Avanzado, PL/SQL, Tutoriales de SQL, Transact-SQL"
tags: "Parámetros, PL/SQL, SQL Server, Procedimientos almacenados"
---

# ¿Cómo usar Parámetros en Stored Procedures?

> Los Stored Procedures son una forma elegante de guardar tu código dentro de una base de datos SQL. Podés guardar tu código y reutilizarlo cuando quieras.

Los Stored Procedures son una forma elegante de guardar tu código dentro de una base de datos SQL. Podés guardar tu código y reutilizarlo cuando quieras.

![](/blog/how-to-use-parameters-in-stored-procedures/image-23.png)

# ¿Qué es un Stored Procedure?

Un Stored Procedure es una forma que tienen la mayoría de las bases de datos SQL de guardar código SQL. Puede recibir variables y podés llamarlo cuando quieras. Después de guardar tu procedimiento, podés llamarlo para ejecutarlo.

## Estandarización de los Stored Procedures

Es esencial saber que no hay una estandarización en cómo se crean los Stored Procedures, cada motor de base de datos SQL tiene su propia forma de crearlos y llamarlos, en este breve artículo vamos a tratar de hacer los mismos Stored Procedures en SQL Server y OracleDB, pero esto no significa que vayan a funcionar en otros motores de bases de datos SQL.

## Parámetros en SQL Server

Los Stored Procedures en SQL Server tienen dos tipos de parámetros, también podés definir una variable dentro del Stored Procedure mismo, pero esa variable va a ser parte del proceso. En cambio, las variables de parámetro son parámetros que vas a definir antes de que corra el stored procedure.

#### Tipos de parámetros en los Stored Procedures de SQL Server

En **SQL Server** tenemos solo dos tipos de parámetros:

-   **Parámetros INPUT**: definidos por defecto, entran al procedimiento pero no salen de él.
-   **Parámetros OUTPUT**: necesitan declararse como OUTPUT, entran al procedimiento y cambian la variable que entra dentro del procedimiento.

### Ejemplo de parámetros en SQL Server

En SQL Server usarías variables de parámetro así:

```sql
-- SQL Server
CREATE PROCEDURE INOUTPROC /* ENCABEZADO DEL PROCEDIMIENTO */
(
    @p_InputVar  nvarchar(20),
    @p_OutputVar INT OUTPUT
)
AS /* CUERPO DEL PROCEDIMIENTO */
BEGIN

    SET @p_OutputVar=1 
    SELECT 
       @p_OutputVar = @p_OutputVar
    SELECT 
       @p_InputVar
END
GO

/* Cambiamos la output var dentro del procedimiento */
DECLARE @p_OutputVarEnter int = 10
EXEC INOUTPROC @p_InputVar = 'Hello World', @p_OutputVar = @p_OutputVarEnter OUTPUT
SELECT @p_OutputVarEnter
```

Tratemos de explicar qué hicimos acá. Creamos un procedimiento llamado INOUTPROC, y declaramos dos variables para él, una llamada @p_InputVar que puede tener hasta 20 caracteres y otra variable llamada @p_OutputVar que sería un INT que devuelve un valor (como output).

Dentro del procedimiento, cambiamos el valor de @p_OutputVar y después hacemos un SELECT del valor dentro de @p_Inputvar.

Después, fuera del procedimiento, declaramos una variable llamada @p_OutputvarEnter, ejecutamos el procedimiento y después hacemos un SELECT de lo que está dentro de @p_OutputVarEnter

**¿El resultado de esto?**

![](/blog/how-to-use-parameters-in-stored-procedures/image-25.png)

#### ¿Por qué pasó esto?

Dentro del stored procedure cambiamos la variable @p_OutputVar, así que cuando hacemos un SELECT de la variable que ingresamos en el procedimiento una vez afuera, cambia. **Una variable OUTPUT en SQL Server es una variable INOUT en PL/SQL**, la podés cambiar dentro del procedimiento. En el caso de @p_InputVar, **no la definimos como variable OUTPUT, así que solo podíamos leerla dentro del procedimiento.**

## Parámetros en PL/SQL

En **PL/SQL y otras bases de datos como Teradata, en cambio tenemos tres tipos** de parámetros.

### Tipos de parámetros en PL/SQL

En PL/SQL tenemos tres tipos de parámetros:

-   **IN**: esta variable de parámetro va a ser parte del procedimiento pero no va a salir de él.
-   **OUT:** esta variable de parámetro va a devolver un valor que crea el procedimiento.
-   **INOUT:** esta variable de parámetro va a entrar al proceso y convertirse dentro de él, sacando otro valor.

### Ejemplo de parámetros en PL/SQL

Ahora tratemos de correr el mismo código en PL/SQL

```sql
-- PL/SQL

CREATE OR REPLACE PROCEDURE INOUTPROC (p_InputVar IN VARCHAR2, p_OutputVar IN OUT INT) 
IS
BEGIN
    p_OutputVar:=1;
    dbms_output.put_line(p_InputVar);
    
END;

SET SERVEROUTPUT ON

DECLARE 
    OutputVarEnter INT:=10;
    InputVar varchar2(20) DEFAULT 'Hello World';
BEGIN 
 INOUTPROC (InputVar,OutputVarEnter);
 dbms_output.Put_line(OutputVarEnter);
END;
```

En este caso, estamos haciendo exactamente lo mismo en PL/SQL. Las variables se definen como IN e IN OUT en lugar de INPUT y OUTPUT.

## Conclusión

Como pudiste ver, los stored procedures son una forma conveniente de guardar tu código, pero va a tener diferencias entre los distintos intérpretes SQL, no hay estandarización en esto y cada base de datos lo maneja a su manera. Deberías tener en cuenta que, a medida que te metés en un lenguaje SQL empresarial, la diferencia entre ellos se va a volver cada vez más evidente.

Acá tenés algunos recursos donde podés aprender más sobre los parámetros de Stored Procedures en [OracleDB](https://docs.oracle.com/cd/B14117_01/appdev.101/b10795/adfns_pc.htm) y [SQL Server](https://learn.microsoft.com/en-us/sql/relational-databases/stored-procedures/parameters?view=sql-server-ver16).

Quizás, ahora que estás aprendiendo SQL avanzado, también podrías sacar algo de [este](/es/how-to-use-a-qualify-clause-in-sql) post.

