2017-05-02 90 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

我做對了嗎?你需要'從temp中選擇count(代碼),其中代碼像$ 1'那樣作爲pattern_number並且'選擇count(代碼)從臨時代碼像$ 1和uoc> $ 2'那樣的uoc_number?..我用代碼添加了答案 - sic? –

+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增加了隱含的演員 - 現在作品?.. –