2017-05-02 5 views
0
이들은

PostgreSQL을 기능

create type IR as (pattern_number integer, uoc_number integer); 

나의 현재 진행 나에게 제공되는 유형 정의입니다

은 다음과 같습니다

create or replace function q1(pattern text, uoc_threshold integer) 
    returns setof IR 
    as $$ 
    BEGIN 
    RETURN QUERY 
    select count(code) from temp where code like $1; 
    RETURN QUERY 
    select count(code) from temp where code like $1 and uoc > $2; 

    END; 
$$ language plpgsql; 

내 출력은 다음과 같이 할 필요가 : 쿼리 : -

select * 
from q1('ECO%', 6); 

pattern_number | uoc_number 
80    |   5  

다음과 같은 오류 메시지가 표시됩니다.

ERROR: structure of query does not match function result type
DETAIL: Returned type bigint does not match expected type integer in column 1.
CONTEXT: PL/pgSQL function q1(text,integer) line 3 at RETURN QUERY

어떻게 수정합니까?

+0

함수는 하나의 (BIGINT) 열 두 개의 행을 반환합니다. 한 열이 레코드 인 단일 행이 필요합니다. –

+0

맞습니까? 당신은'$ 1' 같은 코드를 temp_field에서 select count (code)를 pattern_number로 만들고 '$ 1과 uoc> $ 2'같은 코드를 temp에서 select count (code)를 uoc_number로 쓰길 원합니까? –

+0

@VaoTsun 예. 그게 정확히 내가 원하는하지만 귀하의 대답은 오류를 해결하지 않는 것 같습니다 –

답변

1

당신이 원하는 무엇인가? ..

create or replace function q1(pattern text, uoc_threshold integer) 
    returns setof IR 
    as $$ 
    BEGIN 
    RETURN QUERY 
    select (select count(code) from temp where code like $1)::integer 
    ,(
    select count(code) from temp where code like $1 and uoc > $2)::integer; 

    END; 
$$ language plpgsql; 
+0

당신은 바로 잡았지만 오류가 여전히 거기에 있습니다. 그것은 똑같은 정확한 오류입니다. –

+0

@ JohnKeaton이 암시 적 캐스트를 추가 했습니까? –