172 похожих чатов

Не могу объявить переменную в функции: DROP FUNCTION IF EXISTS return_table(); CREATE

OR REPLACE FUNCTION return_table( double precision, double precision, double precision, double precision) RETURNS table(distance double precision) AS
$$
DECLARE
result1 double precision;
result2 double precision;
BEGIN
result1 = $1;
result2 = $2;
DROP TABLE IF EXISTS ogr_tmp;
CREATE TEMP TABLE ogr_tmp (id integer, source integer, target integer, cost double precision, reverse_cost double precision);
INSERT INTO ogr_tmp SELECT id, source, target, cost, reverse_cost FROM mymatview2 as r WHERE ST_DWithin(geom_way, ST_GeomFromEWKT('SRID=4326;POINT(37.437280 55.672250)'), 1);
RETURN QUERY
WITH source_tmp AS (SELECT source
FROM hh_2po_4pgr
ORDER BY geom_way <-> ST_SetSRID(ST_MakePoint($1, $2), 4326) ASC
LIMIT 1
),
target_tmp AS (SELECT target
FROM hh_2po_4pgr
ORDER BY geom_way <-> ST_SetSRID(ST_MakePoint($3, $4), 4326) ASC
LIMIT 1
)
SELECT SUM(rd.km) as distance
FROM pgr_dijkstra('SELECT * FROM ogr_tmp as r ',
(SELECT source FROM source_tmp) , (SELECT target FROM target_tmp), true) AS r
JOIN hh_2po_4pgr rd ON r.edge = rd.id ;

END;
$$ LANGUAGE plpgsql;
SELECT * FROM return_table(37.437280, 55.672250, 37.902600, 55.662700);


В этом месте:
POINT(37.437280 55.672250)
Пробовал:
POINT($1 $2)
POINT('result1' 'result2')
не хочет принимать, как подставить переменную?

1 ответов

10 просмотров

Через всяческий string concatenation. 'SRID=4326;POINT(' || $1 || ' ' || $2 || ')' и всё такое (не знаю, нормально ли телеграм сейчас пропустит два символа пайпа, но суть там в объединении строк). Но, право, что-то вас понесло куда-то на ночь глядя. Таблицы какие-то временные, функцыи для них, вот это всё. Суньте вашу CTE внутрь строки запроса, она там точно такая жэ, как и во внешнем запросе будет. (Кстати, с точки зрения результата CTE без RECURSIVE -- это всего лишь синтаксический сахар, того жэ самого можно добиться вставляя запрос непосредственно во FROM).

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Карта сайта