PostgreSQL: modos de parámetros de función

Al usar procedimientos y funciones, PostgreSQL nos permite pasar datos del programa que llama al procedimiento o función y recibir datos del procedimiento o función. Esta funcionalidad se logra usando Parámetros .

Los parámetros declarados en la definición de la función se conocen como parámetros formales . Cuando se invoca el procedimiento o la función, el programa que llama proporciona los datos que se utilizarán en el procesamiento del programa llamado, así como las variables que reciben los resultados del procesamiento del programa llamado. Los datos y variables proporcionados por el programa que llama cuando el procedimiento o la función se conocen como parámetros reales .

Un modo de parámetro se utiliza para decidir el comportamiento de los parámetros. PL/pgSQL admite tres modos de parámetros: in, out e inout . Por defecto, un parámetro usa el modo IN. 

El modo IN:

El modo IN se utiliza para pasar un valor a la función. Los parámetros IN simplemente actúan como constantes. A los parámetros IN no se les puede asignar ningún valor. El modo IN es el modo predeterminado que se asigna si no se especifica explícitamente.

El modo de SALIDA:

Los parámetros OUT se declaran como parte de la lista de argumentos y se devuelven como parte del resultado. Los parámetros OUT son muy útiles en funciones que requieren devolver múltiples valores. Actúan como variables no inicializadas.
A diferencia de los parámetros IN, se debe asignar un valor a los parámetros OUT.

EL MODO DE ENTRADA:

El modo INOUT es simplemente una combinación de los modos IN y OUT. En el modo INOUT, la persona que llama pasa un argumento al procedimiento o función. Durante el procesamiento de la función, el valor del argumento cambia y la función devuelve el mismo valor. Por lo tanto, los parámetros INOUT actúan como variables inicializadas y se les debe asignar un valor durante el procesamiento de la función.

tres parámetros

EN AFUERA EN FUERA
Tomado por defecto Debe especificarse explícitamente Debe especificarse explícitamente
Los valores se pasan a una función. El valor es devuelto por una función. Se pasa un valor a la función que devuelve otro valor actualizado
Se comporta como constantes se comporta como un se comporta como un
No se pueden asignar valores Debe asignar un valor Debe asignar un valor

Para probar, creamos una tabla de muestra usando los siguientes comandos para realizar ejemplos:

CREATE TABLE employees (

   employee_id serial PRIMARY KEY,

   full_name VARCHAR NOT NULL,

   manager_id INT

);

Luego insertamos datos en nuestra tabla de empleados de la siguiente manera:

INSERT INTO employees (
   employee_id,
   full_name,
   manager_id
)
VALUES
   (1, 'M.S Dhoni', NULL),
   (2, 'Sachin Tendulkar', 1),
   (3, 'R. Sharma', 1),
   (4, 'S. Raina', 1),
   (5, 'B. Kumar', 1),
   (6, 'Y. Singh', 2),
   (7, 'Virender Sehwag ', 2),
   (8, 'Ajinkya Rahane', 2),
   (9, 'Shikhar Dhawan', 2),
   (10, 'Mohammed Shami', 3),
   (11, 'Shreyas Iyer', 3),
   (12, 'Mayank Agarwal', 3),
   (13, 'K. L. Rahul', 3),
   (14, 'Hardik Pandya', 4),
   (15, 'Dinesh Karthik', 4),
   (16, 'Jasprit Bumrah', 7),
   (17, 'Kuldeep Yadav', 7),
   (18, 'Yuzvendra Chahal', 8),
   (19, 'Rishabh Pant', 8),
   (20, 'Sanju Samson', 8);

La mesa es:

 

Ejemplo 1:

La siguiente función se crea para encontrar el nombre del empleado junto con su ID de gerente dada la ID de empleado y su ID de gerente. 

create or replace function get_stats(
  in eid int,
  out name varchar,
  inout mid int)
language plpgsql
as $$
begin
  select full_name,manager_id
  into name,mid
  from employees
  where manager_id=mid
  and
  employee_id=eid;
end; $$;

Para llamar a esta función, debemos proporcionar la identificación del empleado y luego la identificación del gerente. Como ejemplo,

select * from get_stats(2,1);

Producción:

En este ejemplo, hemos tomado el nombre del empleado como SALIDA, ya que necesitamos generar el nombre, la identificación del empleado como ENTRADA, ya que solo se requiere como entrada, y la identificación del gerente como ENTRADA, ya que se requiere tanto como entrada como salida. . 

Ejemplo 2:

La siguiente función se utiliza para obtener el recuento de empleados en la tabla de empleados.

create or replace function empcount(
  out ecount int)
language plpgsql
as $$
begin
  select count(*)
  into ecount
  from employees;
end; $$;

Para llamar a esta función:

select * from empcount();

Producción:

Ejemplo 3:

La siguiente función se utiliza para intercambiar el contenido de 2 variables

create or replace function swapper(
  inout x int,
  inout y int)
language plpgsql
as $$
begin
  select x,y into y,x;
end; $$;

Para llamar a esta función:

select * from swapper(198,457);

Producción:

Como necesitamos cambiar los valores y luego mostrar los valores cambiados, usamos el modo INOUT.

Publicación traducida automáticamente

Artículo escrito por ashutoshrathi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *