2014-04-16 2 views
0

다음은 2 열의 결과를 제공하는 함수입니다.PostgreSQL - 여러 열을 반환하는 함수

이 함수에는 결과를 반환하는 데 사용 된 Loop이 있습니다.

기능 :

 
Create Type Repeat_rs as (
label text, 
count bigint 
) 

CREATE OR REPLACE FUNCTION Repeat(fromDate date,toDate date) 
returns SETOF Repeat_rs 
AS 
$$ 
Declare someVariableName Repeat_rs; 
BEGIN 
    For someVariableName in (
     SELECT label, count(*) AS Cnt from test where date between fromDate and toDate group by circle 
    ) Loop 
    Return Next someVariableName; 
    End Loop; 
    Return; 
END; 
$$ 
LANGUAGE plpgsql; 

루프를 사용하지 않고 행을 반환의 가능성이 있습니까?

그렇다면 우리가 어떻게 할 수 있는지 나에게 알려주십시오.

루프를 사용하지 않고 테이블에 레코드를 삽입하는 함수를 작성할 수 있습니까?

이 쿼리를 해결하기 위해 나를 도와주세요.

미리 감사드립니다.

+0

내가 받아 들일 수없는 일을하지만 모두 준의 나 내가 기대했던 것에 대답해라. 그러므로 대답 모두 +1. –

+2

당신의 질의가 유효하지 않음에 유의하십시오 :'circle'만으로 그룹화하고'label'을 선택된 컬럼으로 사용하십시오. http://www.postgresql.org/docs/9.3/static/sql-select.html#SQL-GROUPBY – pozs

+0

레이블이 필요합니다. 그것은 오타였습니다. 그런데'groupby'에 라벨을 포함하지 않으면 쿼리가 실행되지 않습니다. –

답변

2

추가 유형 정의가 필요하지 않습니다. 그리고, 여러 행을 반환 사용하는 return query :

이 같은

뭔가 :

CREATE OR REPLACE FUNCTION Repeat(fromDate date,toDate date) 
    returns table (label text, cnt bigint) 
AS 
$$ 
BEGIN 
    Return query 
     SELECT label, count(*) AS Cnt 
     from test 
     where date between fromDate and toDate 
     group by label; 
END; 
$$ 
LANGUAGE plpgsql; 

당신은 심지어 PL/pgSQL의 기능이 필요합니다, 당신은 이것에 대한 간단한 SQL 함수를 사용하지 않습니다

CREATE OR REPLACE FUNCTION Repeat(fromDate date, toDate date) 
    returns table (label text, cnt bigint) 
AS 
$$ 
    SELECT label, count(*) AS Cnt 
    from test 
    where date between fromDate and toDate 
    group by label; 
$$ 
LANGUAGE sql; 
+0

+1, 그러나 'group by circle' 절을 잊어 버렸습니다. 또한'label'는'group by' 절에 없으면 유효한 칼럼이 아닙니다. – pozs

+0

@pozs : 감사합니다. 수정 됨 (복사 및 붙여 넣기 오류) –

1

당신은 아래의 SELECT 쿼리를 사용하여 테이블에 값을 삽입 할 수 있습니다

CREATE OR REPLACE FUNCTION Repeat(fromDate date,toDate date) 
returns VOID 
AS 
$$ 

BEGIN 
    INSERT INTO TABLE_NAME 
     SELECT label, count(*) AS Cnt from test where date between fromDate and toDate group by circle 
END; 
$$ 
LANGUAGE plpgsql; 
관련 문제