查询结构与函数结果类型 postgresql 不匹配
structure of query does not match function result type postgresql
我有这个函数,它以 Varchar 作为输入并抛出一个 table 作为输出。
create or replace function historial_reproductivo_vaca(hierro_v varchar) returns table(hierro_toro varchar, sexo varchar, fecha_nacimiento varchar, peso_nacimiento numeric, peso_destete numeric, clasificacion varchar, estado varchar)
as $$
declare
estado varchar;
begin
create temporary table temp_table AS
select hijos.hierro_padre as toro, hijos.sexo as s, hijos.fecha_nacimiento as nacimiento, hijos.hierro as hierro, pesos.peso_nacimiento, pesos.peso_12_meses, hijos.clasificacion FROM
((select animales.hierro, animales.sexo, animales.fecha_nacimiento, animales.hierro_madre, animales.hierro_padre, animales.clasificacion from animales)
union (select defuncion.hierro, defuncion.sexo, defuncion.fecha_nacimiento, defuncion.hierro_madre, defuncion.hierro_padre, defuncion.clasificacion from defuncion)
union (select venta_carne.hierro, venta_carne.sexo, venta_carne.fecha_nacimiento, venta_carne.hierro_madre, venta_carne.hierro_padre, venta_carne.clasificacion from venta_carne)
union (select venta_finca.hierro, venta_finca.sexo, venta_finca.fecha_nacimiento, venta_finca.hierro_madre, venta_finca.hierro_padre, venta_finca.clasificacion from venta_finca))as hijos
JOIN pesos ON pesos.hierro = hijos.hierro;
alter table temp_table add estado varchar;
--call update_temp_table(temp_table.hierro) from temp_table;
return QUERY SELECT * from temp_table;
end;
$$ language plpgsql;
但是没有问题,问题是当我执行 Select historial_reproductivo_vaca('anything')
然后我得到这个消息:structure of query does not match function result type
我想知道是否有人可以帮助我。谢谢大家
您得到的错误源于您的查询 return 有 8 列,但您的函数定义为 return 7。
您的查询创建临时 table returns 7 列,然后将另一列添加到 table。所以你的 select *
returns 8 列是这样匹配的:
selected column (from temp table) declared output column
---------------------------------------------------------------
toro hierro_toro
s sexo
nacimiento fecha_nacimiento
hierro peso_nacimiento
peso_nacimiento peso_destete
peso_12_meses clasificacion
clasificacion estado
estado (added column) ?????
鉴于结果列名称和 select 列名称,您似乎只是忘记将 (selected) 列 hierro
添加到函数的结果列中。
我有这个函数,它以 Varchar 作为输入并抛出一个 table 作为输出。
create or replace function historial_reproductivo_vaca(hierro_v varchar) returns table(hierro_toro varchar, sexo varchar, fecha_nacimiento varchar, peso_nacimiento numeric, peso_destete numeric, clasificacion varchar, estado varchar)
as $$
declare
estado varchar;
begin
create temporary table temp_table AS
select hijos.hierro_padre as toro, hijos.sexo as s, hijos.fecha_nacimiento as nacimiento, hijos.hierro as hierro, pesos.peso_nacimiento, pesos.peso_12_meses, hijos.clasificacion FROM
((select animales.hierro, animales.sexo, animales.fecha_nacimiento, animales.hierro_madre, animales.hierro_padre, animales.clasificacion from animales)
union (select defuncion.hierro, defuncion.sexo, defuncion.fecha_nacimiento, defuncion.hierro_madre, defuncion.hierro_padre, defuncion.clasificacion from defuncion)
union (select venta_carne.hierro, venta_carne.sexo, venta_carne.fecha_nacimiento, venta_carne.hierro_madre, venta_carne.hierro_padre, venta_carne.clasificacion from venta_carne)
union (select venta_finca.hierro, venta_finca.sexo, venta_finca.fecha_nacimiento, venta_finca.hierro_madre, venta_finca.hierro_padre, venta_finca.clasificacion from venta_finca))as hijos
JOIN pesos ON pesos.hierro = hijos.hierro;
alter table temp_table add estado varchar;
--call update_temp_table(temp_table.hierro) from temp_table;
return QUERY SELECT * from temp_table;
end;
$$ language plpgsql;
但是没有问题,问题是当我执行 Select historial_reproductivo_vaca('anything')
然后我得到这个消息:structure of query does not match function result type
我想知道是否有人可以帮助我。谢谢大家
您得到的错误源于您的查询 return 有 8 列,但您的函数定义为 return 7。
您的查询创建临时 table returns 7 列,然后将另一列添加到 table。所以你的 select *
returns 8 列是这样匹配的:
selected column (from temp table) declared output column
---------------------------------------------------------------
toro hierro_toro
s sexo
nacimiento fecha_nacimiento
hierro peso_nacimiento
peso_nacimiento peso_destete
peso_12_meses clasificacion
clasificacion estado
estado (added column) ?????
鉴于结果列名称和 select 列名称,您似乎只是忘记将 (selected) 列 hierro
添加到函数的结果列中。