2017-08-15 53 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 –

相關問題