【发布时间】:2021-05-20 18:40:25
【问题描述】:
我已经创建了函数,其中之一是:
CREATE OR REPLACE FUNCTION core.cal_status(
er_v DOUBLE PRECISION,
cell_v DOUBLE PRECISION
) RETURNS DOUBLE PRECISION
LANGUAGE plpgsql
AS $$
DECLARE out DOUBLE PRECISION;
BEGIN
IF er_v < 15 THEN out := 'LOW_LOAD';
ELSEIF cell_v < 60 THEN out := 'LOW_LOAD';
ELSEIF er_v > 40 THEN out := 'CONGESTED';
ELSEIF cell_v > 80 THEN out := 'CONGESTED';
ELSEIF cell_v >60 and cell_v < 80 THEN out := 'HIGH_LOAD';
END IF;
RETURN out;
END;
$$;
当我用这个调用函数时:
LEFT JOIN LATERAL core.cal_status(
er_v,
cell_v) status ON true
我得到下一个错误:
ERROR: invalid input syntax for type double precision: "LOW_LOAD" Where: PL/pgSQL function core.cal_status(double precision,double precision) line 4 at assignment
这是怎么回事,我猜是输出类型的东西,但不确定。
【问题讨论】:
-
恕我直言,
RETURNS DOUBLE PRECISION表示您需要在out :=之后使用双精度值;)。 -
您的函数被声明为返回双精度。实际类型为
text。该错误并不令人惊讶或具有误导性。
标签: sql postgresql casting