PostgreSQL – Función que devuelve una tabla

En este artículo, veremos el proceso de desarrollo de funciones que devuelven una tabla. base de datos de muestras de películas

Operador ILIKE:

CREATE OR REPLACE FUNCTION get_film (p_pattern VARCHAR) 
    RETURNS TABLE (
        film_title VARCHAR,
        film_release_year INT
) 
AS $$
BEGIN
    RETURN QUERY SELECT
        title,
        cast( release_year as integer)
    FROM
        film
    WHERE
        title ILIKE p_pattern ;
END; $$ 

LANGUAGE 'plpgsql';

Esta función get_film(varchar) acepta un parámetro p_pattern que es un patrón que desea hacer coincidir con el título de la película.

Para devolver una tabla desde la función, utilice la sintaxis de RETURNS TABLE y especifique las columnas de la tabla. Cada columna está separada por una coma (,).

En la función, devolvemos una consulta que es el resultado de una instrucción SELECT . Observe que las columnas de la declaración SELECT deben coincidir con las columnas de la tabla que queremos devolver. Debido a que el tipo de datos de release_year de la tabla de películas no es un número entero, tenemos que convertirlo en un número entero usando CAST.

Podemos probar la función usando la siguiente declaración:

SELECT
    *
FROM
    get_film ('Al%');

get_film(varchar) Al

SELECT
    get_film ('Al%');

CREATE OR REPLACE FUNCTION get_film (p_pattern VARCHAR, p_year INT) 
    RETURNS TABLE (
        film_title VARCHAR,
        film_release_year INT
) AS $$
DECLARE 
    var_r record;
BEGIN
    FOR var_r IN(SELECT 
                title, 
                release_year 
                FROM film 
                WHERE title ILIKE p_pattern AND 
                release_year = p_year)  
    LOOP
        film_title := upper(var_r.title) ; 
        film_release_year := var_r.release_year;
        RETURN NEXT;
    END LOOP;
END; $$ 
LANGUAGE 'plpgsql';

get_film(varchar, int)

  • p_patrón a

La instrucción RETURN NEXT agrega una fila al conjunto de resultados de la función. La ejecución continúa y el conjunto de resultados se acumula en cada iteración del bucle.

Vea el siguiente caso de prueba:

SELECT
    *
FROM
    get_film ('%er', 2006);

Producción:

Publicación traducida automáticamente

Artículo escrito por RajuKumar19 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 *