【问题标题】:Dynamic Postgress Query; ERROR: operator does not exist: character varying = integer动态 Postgres 查询;错误:运算符不存在:字符变化 = 整数
【发布时间】:2014-04-05 12:40:39
【问题描述】:

我知道这是一个简单/愚蠢的问题,但我在这里苦苦挣扎。 . .

正在运行: 安装了 Brew 的 OSX 上的 Postgress 9.3 下面的函数给了我这个

错误: 运算符不存在:字符变化 = 整数

提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

查询: SELECT substring(address_postal_code for 5) FROM provider_nodes WHERE npi = $1

CONTEXT: PL/pgSQL 函数测试(整数)第 9 行的 EXECUTE 语句

npi_idprovider_nodes 表中存储为varchar,但它是一个数字。 无论如何,还是我需要更改类型?

CREATE OR REPLACE FUNCTION test(npi_id varchar) RETURNS RECORD AS $$
DECLARE 
zip RECORD;
ptlong RECORD;
ptlat RECORD;
result RECORD;

BEGIN
EXECUTE 'SELECT substring(address_postal_code for 5) FROM provider_nodes WHERE npi = $1' INTO zip;
EXECUTE 'SELECT longitude FROM zctas WHERE zcta=$1' INTO ptlong USING zip;
EXECUTE 'SELECT latitude FROM zctas WHERE zcta=$1' INTO ptlat USING zip;
EXECUTE 'SELECT state, zctas FROM zctas WHERE geom &&   ST_expand(ST_transform(ST_PointFromText("POINT(" || ptlong || " " || ptlat || ")", 4269),32661), 16093) AND ST_distance((ST_transform(ST_PointFromText("POINT(" || ptlong || " " || ptlat || ")", 4269),32661),geom) < 16093' INTO result;
RETURN RESULT;
END;
$$ LANGUAGE plpgsql;

【问题讨论】:

    标签: sql dynamic plpgsql execute


    【解决方案1】:

    在动态 SQL 中使用参数时,必须使用 USING 子句。您在第一个陈述中错过了它:

    EXECUTE 'SELECT substring(address_postal_code for 5) FROM provider_nodes WHERE npi = $1' INTO zip USING npi_id;
    

    但在这种情况下使用动态 SQL(语句 EXECUTE)是个坏主意。你可以写

    zip := (SELECT substring(p.address_postal_code for 5) 
               FROM provider_nodes p
              WHERE p.npi = npi_id);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-16
      • 2011-07-03
      • 2014-06-30
      • 1970-01-01
      • 2021-11-15
      • 2018-12-16
      • 2021-01-06
      • 2012-05-19
      相关资源
      最近更新 更多