Я использую PostgreSQL в качестве связанного сервера с SQL Server. Теперь мне нужно вызвать функцию PostgreSQL, которая возвращает ТОЛЬКО одно целое (скалярное), но SQL Server не разрешает удаленные табличные функции и говорит, что этот запрос является табличной функцией.Скалярная функция (функция, отличная от таблицы) в PostgreSQL
CREATE OR REPLACE FUNCTION public.getpointinfo(
IN lng double precision,
IN lat double precision)
RETURNS integer
AS
$$
DECLARE result integer;
begin
result:= case when cwt.k like 'maxspeed' then cast(cwt.v as integer)
else getmaxspeed(s.highway)
end maxspeed
from snapPointToLine(ST_SetSRID(ST_MakePoint($1, $2), 4326)) s
join current_way_tags cwt
on s.id = cwt.way_id
where cwt.k in ('maxspeed', 'highway')
order by cwt.k desc
limit 1;
return result;
end
$$
LANGUAGE plpgsql VOLATILE;
Как я могу изменить этот PostgreSQL запрос возвращать скалярное значение, или, чтобы иметь возможность использовать его как четыре части функции имя из SQL Server, как
select objectid, s.data_source
from testData
outer apply
(
select maxspeed from MB24DB.MobTrack24DB.[public].getpointinfo(X, Y)
) s
openquery
не вариант.
Представленная функция имеет очевидную синтаксическую ошибку. –
Скалярная функция не должна использоваться в предложении 'from'. И поскольку вы это делаете, я полагаю, что SQL Server предполагает, что это функция, ориентированная на таблицу. И поскольку это скалярная функция, я не вижу необходимости использовать «cross apply» в первую очередь. Просто поставьте 'MB24DB.MobTrack24DB. [Public] .getpointinfo (X, Y)' в список 'select' (если ваша таблица' testdata' имеет два столбца x и y) –
@a_horse_with_no_name Ошибка брошена: Ссылка на удаленные функции ' MB24DB.MobTrack24DB.public.getpointinfo 'не разрешено, а имя столбца «MB24DB» не может быть найдено или является двусмысленным. testData содержит столбцы X и Y. – Aleksandar