错误:查询没有结果数据的目的地需要返回浮点数

Posted

技术标签:

【中文标题】错误:查询没有结果数据的目的地需要返回浮点数【英文标题】:ERROR: query has no destination for result data Need to return float 【发布时间】:2015-07-03 11:23:08 【问题描述】:

我想得到一个点的M坐标的类型,使用ST_M和ST_line_interpolate_point等方法,通过SQL就可以得到正确的结果。现在我想把它放到pl/pgsql函数中,它总是有错误,请帮助!谢谢!

create or replace function point_to_M1(x float, y float,z integer)
    returns float AS
    $$
    DECLARE
        geom geometry;
    begin
      select testo.geom from testo where lineid=z;
      return st_astext(ST_line_interpolate_point(st_geometryN(geom,1),st_line_locate_point(st_geometryN(geom,1),'point(x y)')));
    end;
    $$
    language plpgsql;

而且这个函数不存在错误,但是当我使用这个函数时,它有错误。

select point_to_m1(80,0,0) from testo;

错误是:

ERROR:  query has no destination for result data HINT:  If you want to discard the results of a SELECT, use PERFORM instead.CONTEXT:  PL/pgSQL function point_to_m1(double precision,double precision,integer) line 5 at SQL statementter code here

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

问题在于这一行: select testo.geom from testo where lineid=z;

这是一个标准的选择语句,它实际上并没有告诉 Postgresql 将结果存储在任何变量中 - 或者用 Postgresql 的话来说,它没有目的地。

这也意味着在下一行,你尝试使用你的变量 geom 它仍然是空的。

试试这个:

select geom INTO geom from testo where lineid=z;

这里,第一个 geom 是字段名,INTO geom 告诉 Postgresql 将结果存储在您之前声明的变量 geom 中。

为清楚起见,您可能需要重命名变量,因为变量名称与字段相同看起来有点混乱。

这是参考页面:http://www.postgresql.org/docs/9.2/static/plpgsql-statements.html#PLPGSQL-SELECT-INTO

【讨论】:

谢谢!通过你的方法,我得到了geom的值!

以上是关于错误:查询没有结果数据的目的地需要返回浮点数的主要内容,如果未能解决你的问题,请参考以下文章

在 SQLite 上转换表达式结果,从浮点数到十进制数

组态王使用485如何读取仪表浮点数?

带有浮点数的 Mod 给出错误的结果 [重复]

浮点数在插入时变为科学计数法

打乱一个浮点数?

如何将浮点数打印到 n 位小数,包括尾随 0?