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