Cómo crear una función definida por el usuario de PostgreSQL

Cómo crear una función definida por el usuario de PostgreSQL
"Cuando requiere ejecutar muchas declaraciones SQL varias veces, entonces es mejor escribir una función o procedimiento PostgreSQL definido por el usuario con esas declaraciones SQL. Elimina el código duplicado y reutiliza el código llamando a la función de diferentes aplicaciones. La forma de crear y usar diferentes tipos de funciones definidas por el usuario de PostgreSQL se ha mostrado en este tutorial."

Sintaxis

La sintaxis de la función PostgreSQL se da a continuación.

Crear o reemplazar función function_name (argument_list)
Devuelve Return_Type como $ variable_name $
DECLARAR
declaración;
[…]
COMENZAR

[…]
Return variable_name | valor
FIN;
Lenguaje PLPGSQL;
  • La palabra clave Crear se utiliza para crear una nueva función definida por el usuario, y Reemplazar la palabra clave se utiliza para modificar la función existente.
  • El nombre de la función está definido por la función_name, y la función puede tomar uno o más argumentos. Se pueden usar tres tipos de argumentos en la función. Estos son EN, AFUERA, y EN FUERA. El argumento predeterminado de la función es EN argumento. Se usa para pasar el valor a la función, y no se puede cambiar dentro de la función. El AFUERA El argumento se usa para devolver el valor de la función. El EN FUERA El argumento se puede usar para pasar el valor a la función y retorno el valor de la función. Se puede reasignar dentro de la función como saltar argumento.
  • El tipo de datos de la variable que será devuelto por la función se menciona después de devolver la palabra clave.
  • El cuerpo de la función comenzará con la palabra clave declarar, donde se declararán las variables necesarias. A continuación, las declaraciones SQL requeridas se definirán dentro de los bloques de inicio y final.
  • El nombre del lenguaje de procedimiento se define después de la palabra clave del idioma en la que se ejecutará la función.

Requisitos previos

A. Instale el PostgreSQL

Debe instalar la última versión de los paquetes PostgreSQL en el sistema operativo Linux antes de ejecutar las declaraciones SQL que se muestran en este tutorial. Ejecute los siguientes comandos para instalar e iniciar el PostgreSQL:

$ sudo apt-get -y instalación postgresql postgresql-contrib
$ sudo systemctl iniciar postgresql.servicio

Ejecute el siguiente comando para iniciar sesión en PostgreSQL con privilegio raíz.

$ sudo -u postgres psql

B. Puede crear una base de datos con nombre "TestDB" ejecutando la siguiente instrucción SQL.

# Crear base de datos TestDB;

Si quieres crear una tabla en el testdb base de datos, entonces tienes que escribir "\C" Para cambiar la base de datos. Pero en este tutorial, no cambié la base de datos y la tabla, y todas las funciones se crearon en la base de datos predeterminada nombrada post -put.

C. Cree una tabla con nombre de productos con cuatro campos e inserte cuatro registros en la tabla para probar las funciones definidas por el usuario que se crearán más adelante en este tutorial.

# Crear productos de mesa (
ID Clave primaria en serie,
Nombre Varchar (30),
Escriba Varchar (20),
precio dinero);

D. Inserte cuatro registros en la tabla.

# Inserte en productos (nombre, tipo, precio)
Valores ('Samsung A40', 'Mobile', 300),
('A4', 'Mouse', 20),
('Sony 42 ”', 'TV', 1000),
('Samsung 3tb', 'HDD', 600);

Diferentes ejemplos de funciones definidas por el usuario de PostgreSQL

Los usos de las funciones definidas por el usuario con argumento y sin argumento en PostgreSQL se han mostrado a continuación utilizando múltiples ejemplos.

Ejemplo-1: función definida por el usuario sin argumento y valor de retorno

Ejecute la siguiente instrucción SQL para crear una función nombrada function1 () sin ningún argumento, y la función no devolverá nada. La función actualizará el registro de la tabla de productos donde el valor de identificación es 3 después de la ejecución.

# Crear o reemplazar la función de la función1 ()
Devuelve nulo como
$$
COMENZAR
--Actualizar el valor del precio del tercer registro
Actualizar productos establecidos precio = 1500 donde id = 3;
FIN;
$$
Lenguaje 'PLPGSQL';

La siguiente salida aparecerá si la función se crea correctamente en el post -put base de datos.

Ejecute la siguiente instrucción SQL para leer todos los registros del productos tabla antes de ejecutar function1 ().

# Seleccionar * de productos;

La siguiente salida muestra los registros insertados del productos mesa.

Ejecute la siguiente instrucción SQL para ejecutar la función.

# Seleccionar function1 ();


La siguiente salida muestra que una fila se ve afectada al llamar a la función function1 (). El valor del campo de precio de la tabla se actualizará donde el valor de identificación es 3.

Ejecute la siguiente instrucción SQL para leer todos los registros del productos tabla después de ejecutar function1 ().

# Seleccionar * de productos;

La siguiente salida muestra que el valor del precio de la tabla de productos se ha actualizado donde el valor de identificación es 3, y ahora es de 1500.

Ejemplo-2: función definida por el usuario con argumento

El argumento predeterminado de la función está en argumento. Ejecute la siguiente instrucción SQL para crear una función nombrada function2 () con dos argumentos, y la función no devolverá nada. La función insertará un nuevo registro en el productos tabla con los valores de argumento.

# Crear o reemplazar la función de la función2 (nombre Varchar, type varchar, precio int)
Devuelve nulo como
$$
COMENZAR
--Insertar un nuevo disco
Inserte en productos (nombre, tipo, precio)
Valores (nombre, tipo, precio);
FIN;
$$
Lenguaje 'PLPGSQL';


La siguiente salida aparecerá si la función se crea correctamente en el post -put base de datos.

Ejecute la siguiente instrucción SQL para ejecutar la función tres en los valores de argumento. Estos son "iPhone", "móvil" y 2000.

# Seleccionar function2 ('iPhone', 'móvil', 2000);

La siguiente salida muestra que una fila se ve afectada al llamar a la función function2 (), y se insertará un nuevo registro en la tabla.

Ejecute la siguiente instrucción SQL para leer todos los registros del productos tabla después de ejecutar function2 ().

# Seleccionar * de productos;

La siguiente salida muestra que se ha insertado un nuevo registro en el productos mesa.

Ejemplo-3: función definida por el usuario sin argumento

El argumento de salida se usa para devolver el valor de la función. Ejecute la siguiente instrucción SQL para crear una función nombrada function3 () con un argumento de un tipo de dinero, y la función devolverá los datos del tipo de dinero. La función devolverá el valor asignado del argumento de salida.

# Crear o reemplazar la función de la función3 (precio de precio)
Devuelve dinero como
$$
COMENZAR
--Asignar un valor al argumento
precio: = 1000;
FIN;
$$
Lenguaje 'PLPGSQL';


La siguiente salida aparecerá si la función se crea correctamente en el post -put base de datos.

Ejecute la siguiente instrucción SQL para eliminar los registros de la tabla de productos en función del valor devuelto por function3 ().

# Eliminar de los productos donde el precio <= function3();


La siguiente salida muestra que tres filas se ven afectadas llamando a la función function3 (). El valor devuelto de la función es de 1000, que coincide con los tres registros del productos mesa donde el identificación Los valores son 1, 2, y 4.

Ejecute la siguiente instrucción SQL para leer todos los registros del productos tabla después de ejecutar function3 (). La salida muestra que existen dos registros en la tabla donde el precio Los valores son más de 1000.

# Seleccionar * de productos;

La siguiente salida muestra que se han eliminado 3 registros del productos mesa.

Ejemplo-4: función definida por el usuario con argumento inout

El argumento inout se usa en la función para pasar valores en la función y return valores de la función. Ejecute la siguiente instrucción SQL para crear una función nombrada calcular() con un argumento inout del tipo flotante y un argumento del tipo entero. La función devolverá los datos del tipo de flotación. La función se ejecutará con el monto de las ventas, que será un valor flotante, y el descuento, que será un entero. El monto de las ventas después del descuento se calculará en función de los valores de argumento en. A continuación, el monto de las ventas calculado se devolverá de la función utilizando el argumento de salida.

# Crear o reemplazar la función calcular (
sales_amount inout float, descuento int)
Devuelve flotar como
$$
COMENZAR
--Calcule la cantidad de descuento
sales_amount: = sales_amount - (sales_amount*descuento/100);
FIN;
$$
Lenguaje 'PLPGSQL';

La siguiente salida aparecerá si la función se crea correctamente en el post -put base de datos.

Ejecute la siguiente declaración para ejecutar la función con 10000 como el monto de las ventas y 5 como el monto del descuento

#Select Calcule (10000, 5) como descuento_amount;

El 5% de 10000 es 500 y 10000-500 = 9500. El siguiente resultado muestra el monto de las ventas después de un descuento del 5%.

Ejemplo-5: usuario-Defusión Función con el Sentencia condicional

Ejecute la siguiente instrucción SQL para crear una función nombrada Search_product () con un argumento, y la función devolverá los datos del tipo VARCHAR. La forma de declarar la variable de función y el uso de la declaración condicional se ha mostrado en esta función. La variable de función nombrada nombre del producto ha sido definido con el Nombre tipo de la productos mesa. El valor de en el argumento, TP, se combinará con el valor del tipo campo de la productos mesa. Si no se encuentra ninguna coincidencia en la tabla, se planteará un error con el mensaje, "el tipo de producto no existe". Si se encuentra alguna coincidencia, entonces el valor del Nombre El campo de ese tipo de producto se almacenará en la variable de función, y la variable se devolverá desde la función.

# Crear o reemplazar la función Search_Product (TP Varchar)
Devuelve Varchar como
$$
DECLARAR
Product_name Products.Nombre%Tipo;
COMENZAR
-- Search Nombre del producto basado en el tipo
Seleccione el nombre en Product_Name
De productos
Donde productos.Type = tp;
Si no se encuentra, entonces
Raise 'El tipo de producto no existe.';
TERMINARA SI;
Devolver product_name;
FIN;
$$
Lenguaje 'PLPGSQL';

La siguiente salida aparecerá si la función se crea correctamente en el post -put base de datos.

Ejecute la siguiente instrucción SQL para leer todos los registros de la tabla de productos.

# Seleccionar * de productos;

Ejecute la siguiente instrucción SQL para ejecutar la función Search_Product () con el tipo de producto "Móvil".

# Seleccione Search_Product ('mobile');

Ejecute la siguiente instrucción SQL para ejecutar la función Search_Product () con el tipo de producto "C.A".

# Seleccione Search_Product ('AC');

La siguiente salida muestra que el productos La tabla contiene dos registros de valores de tipo ","TELEVISOR" y "Móvil". La salida de la primera ejecución de la función ha devuelto "iPhon" porque el tipo de producto "móvil" existe en la tabla. La salida de la segunda ejecución de la función ha devuelto un mensaje de error porque el tipo de producto "AC" no existe en la tabla.

Ejemplo-6: función definida por el usuario con función agregada

Cualquier función agregada compatible con SQL se puede usar en la función PostgreSQL. Ejecute la siguiente instrucción SQL para crear una función nombrada count_product () sin ningún argumento, y la función devolverá los datos del tipo entero. La función agregada Count () se ha utilizado en la función que se utiliza para contar el número de filas en función de la condición específica. Aquí, una variable de función llamada Total_Product se ha declarado en la función para almacenar el valor de retorno de la función Count (). La función Count () se ha utilizado en la consulta SELECT para contar los registros donde el nombre del producto comienza con la palabra "Sony".

# Crear o reemplazar funciones count_product ()
Devuelve int como
$$
DECLARAR
Total_Product int;
COMENZAR
--Cuente el número total del producto en particular
Seleccione Count (*) en Total_Product de productos
Donde nombre como 'Sony%';
Return Total_Product;
FIN;
$$
Lenguaje PLPGSQL;

La siguiente salida aparecerá si la función se crea correctamente en el post -put base de datos.

Ejecute el siguiente comando para ejecutar la función, count_product ().

# Seleccionar count_product ();

La siguiente salida muestra que la función count () devuelve el valor 1 porque solo hay un registro que coincide con el valor, "Sony".

Conclusión

El propósito de usar funciones PostgreSQL y diferentes formas de usar funciones PostgreSQL con argumentos in, out e inout se han descrito en este tutorial mediante la creación de múltiples funciones PostgreSQL. El argumento en el argumento se usa para tomar valor en la función. El argumento de salida se usa para devolver el valor de la función. El argumento de inout se usa para tomar el valor de entrada a la función y devolver la salida de la función. La función se puede crear sin ningún argumento también. Espero que el usuario pueda crear y usar la función PostgreSQL correctamente después de leer este tutorial.