2016-08-27 7 views
0

以下のクエリでは、配列形式で値を取得していますが、列名も取得したいと考えています。postgresqlの結果に列名を取得するには

CREATE OR REPLACE FUNCTION load_page(IN _session integer) 
    RETURNS TABLE(col1 text, col2 text) AS 
$BODY$ 
BEGIN 
    RETURN QUERY 
    select 
    (SELECT array_agg(sq.*) 
    FROM (SELECT user_id, user_name 
      FROM "user" 
     ) sq 
    )::text, 
    (SELECT array_agg(sq.*) 
    FROM (SELECT client_id, client_name ,client_desc 
      FROM "clients" 
     ) sq 
    )::text; 
END; 
$BODY$ LANGUAGE plpgsql STABLE; 

結果は次のとおりです。

"("{""(2,Test)"",""(5,Santhosh)"",""(3,Test1)""}","{""(1,Test1,Test1)"",""(2,test2,test2)"",""(3,test3,test3)""}")" 
+1

「列名を取得する」とはどういう意味ですか?あなた** **あなたの質問を編集し、結果をどのように表示することができますか? – Patrick

+0

@Patrick私はvaluesを持つ列名を取得したい。特定の列名の値を知ることができる。 – user2432361

答えて

0

あなたは単に選択の外側に行としてそれを使用する1つの列にそれらと連結を入力できます。

CREATE OR REPLACE FUNCTION load_page(IN _session integer) 
    RETURNS TABLE(col1 text, col2 text) AS 
$BODY$ 
BEGIN 
    RETURN QUERY 
    select 
    (SELECT array_agg(sq.*) 
    FROM (SELECT concat('user_id: ',user_id,', user_name: ', user_name) 
      FROM "user" 
     ) sq 
    )::text, 
    (SELECT array_agg(sq.*) 
    FROM (SELECT concat('client_id: ',client_id,', client_name: ',client_name,', client_desc: ',client_desc) 
      FROM "clients" 
     ) sq 
    )::text; 
END; 
$BODY$ LANGUAGE plpgsql STABLE; 

あなたは破棄する場合値が0の場合は特定の列に関する情報がNULLで、条件付きで列名を追加できます(CASEステートメント付き)。

+0

エラーをスローする指定された名前と引数の型に一致する関数はない。明示的な型キャストを追加する必要があるかもしれません。 – user2432361

+0

@ user2432361関数呼び出しに何か問題があるはずです。わたしにはできる。 –

+0

私はselect load_page(1)のようにこの関数を呼び出しますが、同じエラーをスローします – user2432361

0

以下の関数は、中括弧や二重引用符を生成しませんが、列名を含みます。

パラメータ_sessionは決して使用されませんが、これはすべてより大きなクエリ/関数の一部であると仮定します。

CREATE OR REPLACE FUNCTION load_page(IN _session integer, OUT col1 text, OUT col2 text) 
RETURNS SETOF record AS $BODY$ 
BEGIN 
    SELECT string_agg('user_id: ' || user_id || 
        ', user_name: ' || user_name, ',') 
    INTO col1 
    FROM "user"; 

    SELECT string_agg('client_id: ' || client_id || 
        ', client_name: ' || client_name || 
        ', client_desc: ' || client_desc, ',') 
    INTO col2 
    FROM "clients"; 

    RETURN NEXT; 
END; 
$BODY$ LANGUAGE plpgsql STABLE; 
関連する問題