2017-05-01 17 views
1

Ich bin verwirrt über die Weitergabe Prozess des Parameters von Funktionen in Postgres erstellt:postgresql Funktion gibt mehrere Spalten

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

create or replace function text1(pattern text, uoc_threshold integer) 
    returns setof IncorrectRecord 
as $$ 
begin 
return next count(v1.code) as pattern_number, count(v2.code) as uoc_number 
from (select * from q1_1 where code like pattern) as v1, (select 
* from q1_1 where code like pattern and uoc > uoc_threshold) as v2; 
return; 
end 
$$ language plpgsql; 

ich einige geändert haben, gibt es keine Fehler Parameter, aber es funktioniert immer noch nicht. , wenn ich es getestet mit

select * 
from test1('ECO%', 8) 

error: function returns two columns.

Gibt es irgend etwas falsch mit der Art? Wie kann ich es reparieren?.

+0

'gibt IncorrectRecord' zurück - Was ist' IncorrectRecord'? –

+0

Wenn Sie das Wertepaar abrufen möchten, wobei die erste Zahl die Zahl "Code wie Muster" und die zweite die Zählung ist, bei der "Code wie Muster und Uoc> Uoc_Threshold" verwendet wird, verwenden Sie die falsche Methode. Beantworten Sie Ihre Frage kurz, es ist unmöglich, Parameter in DDLs zu verwenden. – Abelisto

+1

Ist das eine Art Hausaufgabe? Sieht furchtbar ähnlich aus: http://stackoverflow.com/questions/43735008/postgresql-functions –

Antwort

0

Wie die Nachricht sagt, dass Sie zwei Spalten zurückgeben. Gebe stattdessen einen zusammengesetzten Typ zurück:

return next (
    count(v1.code) as pattern_number, count(v2.code) as uoc_number 
)::IncorrectRecord 
Verwandte Themen