Я создал пользовательскую функцию в pl/pgsql, и это только входной массив. Я хотел бы использовать результат запроса как вход для этой настраиваемой функции, но не может показаться, что это правильно. Я буду использовать более простую функцию в качестве примера, а также более простой запрос, чем тот, который я пытаюсь использовать в качестве ввода.Использовать SQL-запрос как параметр массива (ввод) в пользовательской функции
Определение функции:
CREATE OR REPLACE FUNCTION bigger_than_ones(input_array int[])
returns SETOF int
AS
$$
DECLARE
array_item int;
BEGIN
FOREACH array_item in ARRAY input_array
LOOP
IF array_item > 1 THEN
RETURN NEXT array_item;
END IF;
END LOOP;
END
$$ LANGUAGE plpgsql;
У меня есть таблица, которая имеет столбец такой же тип данных и тип данных массива. В этом случае числа колонок:
SELECT * FROM my_table;
id | int_attribute
---+--------------
1 | 2
2 | 3
3 | 1
4 | 4
5 | 1
6 | 6
7 | 1
8 | 1
9 | 8
Я хотел бы использовать запрос, который возвращает столбец этого типа данных в качестве входных данных для моей функции. Я попробовал несколько вариантов этого, без везения:
SELECT * FROM bigger_than_ones(SELECT int_attribute FROM my_table);
Для возврата:
result
-------------
2
3
4
6
8
Причина я использую так же структурированную функцию, потому что мне нужно рассчитать в результате слитый время диапазоны (настраиваемый тип) из нескольких таблиц, в нескольких местах моего кода. Моя лучшая мысль заключалась в том, чтобы создать функцию, которая будет делать это, используя в качестве входных данных все временные диапазоны, независимо от того, откуда я ее взял, поэтому мне не пришлось бы делать более сложный запрос каждый раз.
Любые мысли о том, что мне не хватает?
Мне непонятно, чего вы пытаетесь достичь с помощью запроса. Пожалуйста, отредактируйте свой вопрос и добавьте примерные данные и ожидаемый результат на основе этих данных. [_Formatted_] (http://stackoverflow.com/help/formatting) ** текст **, пожалуйста, [без скриншотов] (http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload-images-of-code-on-so-when-ask-a-question/285557 # 285557) –
это не просто 'select int_attribute from my_table, где int_attribute> 1'? –
ваша функция ожидает ** массив **. Почему вы думаете, что можете (или должны) передать ему простое целочисленное значение? Почему вы так определили свою функцию? –