2017-08-15 50 views
0

我知道有一个SELECT array_agg(f) FROM (SELECT blah FROM stuff) f的过程,这在SQL中很棒,但在PL/pgSQL中编写函数时,有没有简写方法?在PL/PgSQL中将返回的SETOF转换为数组

我想把JSON键放到一个数组中,我可以用来看看长度。 喜欢的东西...

v_len := array_length(array_agg(json_object_keys(myjson)), 1);

而不是长,声明一个变量,做一个SELECT array_agg(f) INTO ...,这是我一直在做。我似乎有数百个实现使用相同的SQL字符串,但我真的想削减我的代码,我的手指从所有多余的键入都麻木了。

我用这种简写方法遗漏了什么?

回答

2

你可以使用一个阵列(子查询)构造

DO $$ 
DECLARE a int[]; 
BEGIN 
    a := ARRAY(SELECT * FROM generate_series(1,10)); 
    RAISE NOTICE 'result: %', a; 
END; 
$$; 
+0

真棒,知道这是什么短,方便。我最终使用你的解决方案,就像这样...'array_length(ARRAY(SELECT rs FROM json_object_keys(myjson)rs),1)',它可以很好地工作以获得JSON密钥的数量。 –

+1

@GuyPark:你可以将'SELECT rs FROM json_object_keys(myjson)rs'缩短为'SELECT json_object_keys(myjson)' –

+0

Nick –

相关问题