2017-08-15 3 views
0

SELECT array_agg(f) FROM (SELECT blah FROM stuff) fというプロセスがあることは知っていますが、SQLでは素晴らしいですが、PL/pgSQLで関数を書くときには、返されたSETOFをPL/PgSQL(具体的には)の配列に変換する

私は長さを見るために使用できる配列にJSONキーを入れようとしています。 のような何か...

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

の代わりに、長い、変数を宣言し、私が行ってきたSELECT array_agg(f) INTO ...を行います。私は、同じSQL文字列を使用して何百もの実装をしているようですが、私は本当に私のコードを削減したい、私の指がすべての冗長な入力から麻痺している。

この省略方法では何が欠けていますか?

答えて

2

あなたがARRAY(副選択)コンストラクタ

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

そのニックのための歓声 –

関連する問題