即使所有的计算都完成了,函数也不会返回数据,而且我可以在控制台中看到带有这些信息的消息。
如果尝试创建一个记录变量来存储值,并为每行返回next。
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;预期输出
year cod_cliente nombre cantidad clasificacion
2018 1234 Juan 12 compra
2016 3232 pedro 1 recompra 发布于 2019-07-12 14:14:55
你的代码有很多问题,我会马上列出我能看到的问题:
RETURN NEXT语句。你必须为你想要返回的每一行都设置一个。RETURNS TABLE子句中的返回参数已经是PL/pgSQL变量。:=而不是=进行赋值。这是受支持的方式,可避免与比较运算符混淆。https://stackoverflow.com/questions/57000407
复制相似问题