2017-05-02 6 views
0

Dies sind die Typdefinitionen mir zur Verfügung gestelltPostgresql Funktionen

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

Mein aktueller Fortschritt ist:

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; 

braucht Meine Ausgabe wie folgt zu sein: Abfrage: -

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

pattern_number | uoc_number 
80    |   5  

Ich erhalte eine Fehlermeldung:

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

Wie behebe ich das?

+0

Ihre Funktion gibt zwei Reihen mit einer einzigen (bigint) Spalte. Sie möchten eine einzelne Zeile mit einer einzelnen Spalte, die ein Datensatz ist. –

+0

bekomme ich es richtig? Sie möchten 'count (code) von temp wählen, wo Code wie $ 1' als pattern_number und 'count (code) von temp auswählen, wo code wie $ 1 und uoc> $ 2' als uoc_number? .. Ich habe eine Antwort mit code - sic hinzugefügt? –

+0

@VaoTsun Ja. Das ist genau das, was ich will, aber Ihre Antwort scheint den Fehler nicht zu beheben –

Antwort

1

Ist es das, was Sie wollen? ..

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

Sie haben es richtig gemacht, aber der Fehler ist immer noch da. Es ist der gleiche genaue Fehler. –

+0

@JohnKeaton hinzugefügt implizite Besetzung - funktioniert jetzt? .. –

Verwandte Themen