2016-08-27 3 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; 

결과는 다음과 같습니다

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; 

당신이 폐기하려는 경우 :

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

"열 이름 가져 오기"란 무엇을 의미합니까? ** ** 귀하의 질문을 편집하고 결과를 원하는 방식으로 보여줄 수 있습니까? – Patrick

+0

@ 패트릭 나는 values와 함께 열 이름을 얻고 싶다. 그래서 특정 열 이름 값을 알 수있다. – user2432361

답변

0

당신은 단순히 선택 외부의 행으로 사용하는 하나 개의 컬럼으로 그들과 CONCAT를 입력 할 수 있습니다 값이 특정 열에 대한 정보 인 경우 NULL이면 조건부로 열 이름을 추가 할 수 있습니다 (CASE 문 사용).

+0

그것은 오류를 던진다 주어진 이름과 인자 타입과 일치하는 함수가 없다. 명시 적 타입 캐스트를 추가해야 할 수도 있습니다. – user2432361

+0

@ user2432361 함수 호출에 잘못된 것이 있어야합니다. 그것은 나를 위해 작동합니다. –

+0

이 함수를 select load_page (1)과 같이 호출하지만 동일한 오류가 발생합니다 – user2432361

0

아래 함수는 중괄호 또는 큰 따옴표의 넘침을 생성하지 않지만 열 이름을 포함하며 초기 버전보다 훨씬 간결하고 읽기 쉽고 효율적입니다.

매개 변수는 사용되지 않지만이 매개 변수는 모두 더 큰 쿼리/함수의 일부라고 가정합니다.

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; 
관련 문제