Конечно, вы можете сделать это, поместив вызов функции в предложение FROM
, как правильно ответил Эрик Брандштеттер. Однако это иногда усложняет запрос, в котором уже есть другие вещи в предложении FROM. Чтобы получить отдельные столбцы, которые возвращает функция, вы можете использовать этот синтаксис:
SELECT (testfunction()).*
Или получить только столбец с именем «a»:
SELECT (testfunction()).a
Поместите всю функцию, включая входные значения, в круглые скобки, а затем точку и имя нужного столбца или звездочку.
Чтобы получить имена столбцов, которые возвращает функция, вам нужно:
- проверить исходный код
- сначала проверьте результат функции, например:
SELECT * FROM testfunction()
.
Входные значения могут по-прежнему выходить из предложения FROM
. Чтобы проиллюстрировать это, рассмотрим эту функцию и тестовые данные:
CREATE FUNCTION funky(a integer, b integer)
RETURNS TABLE(x double precision, y double precision) AS $$
SELECT a*random(), b*random();
$$ LANGUAGE SQL;
CREATE TABLE mytable(a integer, b integer);
INSERT INTO mytable
SELECT generate_series(1,100), generate_series(101,200);
Вы можете вызвать функцию "funky(a,b)" без необходимости помещать ее в предложение FROM
:
SELECT (funky(mytable.a, mytable.b)).*
FROM mytable;
Что приведет к 2 столбцам:
x | y
-------------------+-------------------
0.202419687062502 | 55.417385618668
1.97231830470264 | 63.3628275180236
1.89781916560605 | 1.98870931006968
(...)
person
wbloos
schedule
10.01.2020
SQL
, которая немного ускорит работу) - person a_horse_with_no_name   schedule 02.02.2013