Как проверить, если значение во входном массиве в функции PostgreSQL - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть функция чистого SQL, подобная этой:

CREATE OR REPLACE FUNCTION get_buildings_by_type(
    building_types TEXT
)

RETURNS TABLE (bldg_id TEXT, "SurfArea" FLOAT, geom GEOMETRY) AS

$$
    SELECT
        bldg."OBJECTID"::TEXT AS bldg_id,
        bldg."SurfArea"::FLOAT,
        bldg.geom
    FROM
        static.buildings AS bldg
    WHERE
        bldg."LandUse" = $1
$$

LANGUAGE SQL;

И она ведет себя, как и ожидалось, все работает.Однако я хотел бы, чтобы он работал с входным массивом building_types, а не с отдельными значениями.Когда я пробую это вместо:

CREATE OR REPLACE FUNCTION get_buildings_by_type(
    building_types TEXT[]
)

RETURNS TABLE (bldg_id TEXT, "SurfArea" FLOAT, geom GEOMETRY) AS

$$
    SELECT
        bldg."OBJECTID"::TEXT AS bldg_id,
        bldg."SurfArea"::FLOAT,
        bldg.geom
    FROM
        static.buildings AS bldg
    WHERE
        bldg."LandUse" IN $1
$$

LANGUAGE SQL;

я получаю синтаксическую ошибку:

ERROR:  syntax error at or near "$1"
LINE 15:   bldg."LandUse" IN $1

Любые идеи?

Версия 9.6, если это уместно.

1 Ответ

0 голосов
/ 19 ноября 2018

Эквивалентом оператора IN для массивов является оператор any:

Вам необходимо использовать:

WHERE
    bldg."LandUse" = any($1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...