首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数未返回表

函数未返回表
EN

Stack Overflow用户
提问于 2019-07-12 12:56:44
回答 1查看 36关注 0票数 0

即使所有的计算都完成了,函数也不会返回数据,而且我可以在控制台中看到带有这些信息的消息。

如果尝试创建一个记录变量来存储值,并为每行返回next。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION recompra ()
RETURNS TABLE (
anho INTEGER,
cod_cliente INTEGER,
cliente VARCHAR(255),
cantidad INTEGER,
clasificacion VARCHAR(64)
) AS $$
DECLARE
anho INTEGER;
cod_cliente INTEGER;
cliente VARCHAR(255);
cantidad INTEGER;
clasificacion VARCHAR(64);
anhos_anteriores INTEGER;
BEGIN
FOR anho IN (SELECT DISTINCT(EXTRACT(YEAR FROM v.fecha_factura)) as anhos 
    FROM ventas_vehiculos as v
    GROUP BY anhos 
    ORDER BY anhos ASC) LOOP
    BEGIN 
    FOR cod_cliente , cliente IN (SELECT d.cod_cliente, CONCAT(TRIM(d.nombre),' ',TRIM(d.apellido))
                              FROM clientes as d  WHERE estado_cliente <> 'Inactivo' LIMIT 10) LOOP
                -- TRAE LAS VENTAS POR ANHO
    BEGIN
    FOR cantidad IN SELECT COUNT(f.nro_factura) FROM  ventas_vehiculos as f 
                    WHERE f.cliente = cod_cliente
                    AND EXTRACT(YEAR FROM f.fecha_factura) =anho LOOP
                    SELECT COUNT(f.nro_factura) FROM ventas_vehiculos as f 
                    WHERE f.cliente = cod_cliente
                    AND extract(YEAR FROM f.fecha_factura) < anho INTO anhos_anteriores;

                    IF (cantidad >0 AND anhos_anteriores > 1) THEN
                            clasificacion = 'Recompra';
                    ELSIF (cantidad > 0 AND anhos_anteriores = 0) then
                        clasificacion = 'Compra';
                    ELSIF (cantidad =0) THEN
                        clasificacion = 'No compra';

                    RAISE NOTICE '% -- % -- % -- % -- % --', anho,cod_cliente,cliente,cantidad,clasificacion;
                    END IF;

                    END LOOP; --- cierra loop cantidades por anho

                END; -- cierra trae ventas por anho     

            END LOOP;   --- cierra for clientes

        END; -- cierra begin clientes

END LOOP; -- CIERRA FOR ANHOS

END; 
$$ LANGUAGE plpgsql;

预期输出

代码语言:javascript
复制
year   cod_cliente nombre cantidad clasificacion 
2018   1234       Juan    12      compra
2016   3232       pedro    1      recompra 
EN

回答 1

Stack Overflow用户

发布于 2019-07-12 14:14:55

你的代码有很多问题,我会马上列出我能看到的问题:

  • 代码中没有RETURN NEXT语句。你必须为你想要返回的每一行都设置一个。
  • 你声明了与输出参数同名的局部变量,这会导致名称冲突。别干那事。RETURNS TABLE子句中的返回参数已经是PL/pgSQL变量。
  • 您应该使用:=而不是=进行赋值。这是受支持的方式,可避免与比较运算符混淆。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57000407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档