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 ответов

16 просмотров

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

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
8
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Карта сайта