2017-08-15 1 views
0

Ich weiß, es gibt den Prozess SELECT array_agg(f) FROM (SELECT blah FROM stuff) f, die in SQL ist großartig, aber wenn Schreiben Funktionen in PL/pgSQL, gibt es eine Kurzschrift-Methode?Konvertieren eines zurückgegebenen SETOF in ein Array in PL/PgSQL (speziell)

Ich versuche, JSON-Schlüssel in ein Array zu setzen, die ich verwenden kann, um die Länge zu betrachten. So etwas wie ...

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

anstelle des langen, eine Variable deklarieren, führen Sie eine SELECT array_agg(f) INTO ..., die ich getan habe. Ich habe Hunderte von Implementierungen mit der gleichen SQL-Zeichenfolge, aber ich möchte wirklich meinen Code reduzieren, meine Finger werden von allen überflüssigen Typisierung taub.

Was fehlt mir bei dieser Kurzschrift-Methode?

Antwort

2

können Sie eine ARRAY (subselect) Konstruktor

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

Awesome, wusste, dass es etwas kurz und praktisch war. Am Ende benutzte ich deine Lösung so ... 'array_length (ARRAY (SELECT rs VON json_object_keys (myjson) rs), 1)', was wunderbar funktioniert, um die Anzahl der JSON-Schlüssel zu erhalten. –

+1

@GuyPark: Sie können 'SELECT rs FROM json_object_keys (myjson) rs' zu' SELECT json_object_keys (myjson) ' –

+0

Prost für diesen Nick –

Verwandte Themen