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.