Saltar al contenido

¿Cómo devolver varias filas de la función PL/pgSQL?

Después de consultar especialistas en este tema, programadores de varias ramas y maestros hemos dado con la respuesta a la interrogande y la plasmamos en este post.

Solución:

Después de corregir los errores que @Pavel señaló, también defina su tipo de devolución correctamente, o debe proporcionar una lista de definición de columna con cada llamada.

Esta llamada:

SELECT * FROM get_object_fields()

… asume que Postgres sabe cómo expandirse *. Dado que está devolviendo registros anónimos, obtiene una excepción:

ERROR:  a column definition list is required for functions returning "record"

Una forma (de varias) de arreglar esto es con RETURNS TABLE (Postgres 8.4+):

CREATE OR REPLACE FUNCTION get_object_fields()
  RETURNS TABLE (department_id int) AS 
$func$
BEGIN
   RETURN QUERY
   SELECT department_id
   FROM   fact_department_daily 
   WHERE  report_date = '2013-06-07';
END
$func$ LANGUAGE plpgsql;

Funciona para funciones SQL de la misma manera.

Relacionado:

  • PostgreSQL: ERROR: 42601: se requiere una lista de definición de columna para las funciones que devuelven “registro”

Veo más errores:

primero, una llamada a SET RETURNING FUNCTIONS tiene la siguiente sintaxis

SELECT * FROM get_object_fields()

segundo: DEVOLVER CONSULTA reenvía el resultado de la consulta a la salida directamente. No puede almacenar este resultado en una variable; ahora no es posible en PostgreSQL.

BEGIN
  RETURN QUERY SELECT ....; -- result is forwarded to output directly
  RETURN;   -- there will not be any next result, finish execution
END;

tercero: es mejor implementar estas funciones simples en lenguajes SQL

CREATE OR REPLACE FUNCTION get_object_fields()
RETURNS SETOF RECORD AS $$
SELECT department_id WHERE ...
$$ LANGUAGE sql STABLE;

Te mostramos las comentarios y valoraciones de los usuarios

Si conservas alguna suspicacia o forma de acrecentar nuestro sección eres capaz de ejecutar una nota y con gusto lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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