Преобразование возвращенного SETOF в массив в PL/PgSQL (в частности)
Я знаю, что есть процесс SELECT array_agg(f) FROM (SELECT blah FROM stuff) f
, что здорово в SQL, но при написании функций в PL/pgSQL, существует ли сокращенный метод??
Я пытаюсь поместить ключи JSON в массив, который я могу использовать, чтобы посмотреть на длину. Что-то вроде...
v_len := array_length( array_agg(json_object_keys(myjson)), 1);
вместо long объявите переменную, сделайте SELECT array_agg(f) INTO ...
что я и делал. Мне кажется, сотни реализаций используют одну и ту же строку SQL, но я действительно хочу сократить свой код, мои пальцы немеют от всей избыточной типизации.
Чего мне не хватает в этом сокращенном методе?
1 ответ
Решение
Вы можете использовать конструктор ARRAY(subselect)
DO $$
DECLARE a int[];
BEGIN
a := ARRAY(SELECT * FROM generate_series(1,10));
RAISE NOTICE 'result: %', a;
END;
$$;