我在postgres中有两种形式的相同函数(见下文),它们都返回相同类型的“表”结果集。它们的定义方式不是DRY(不要重复自己),有没有办法只将结果集声明一次?
CREATE OR REPLACE FUNCTION validation_report(_accession text)
RETURNS TABLE (
accession VARCHAR,
peptide VARCHAR,
modified_sequence VARCHAR,
var_mod text,
spectrum_title VARCHAR,
confidence real,
precursor_mz_error real,
sample_name text,
transcript text,
gene_symbol VARCHAR,
prot_seq text
) AS
$func$
BEGIN
RETURN query select * from validation_report(array[_accession]);
END
$func$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION validation_report(_accession text[])
RETURNS TABLE (
accession VARCHAR,
peptide VARCHAR,
modified_sequence VARCHAR,
var_mod text,
spectrum_title VARCHAR,
confidence real,
precursor_mz_error real,
sample_name text,
transcript text,
gene_symbol VARCHAR,
prot_seq text
) AS
$func$
BEGIN
RETURN QUERY ..the query..
END
$func$ LANGUAGE plpgsql;
答案 0 :(得分:0)
如果函数对特定表进行查询,您可以尝试返回复合类型或使用RETURN SETOF table_name
。如果没有,您可以创建一个表/类型来定义返回类型。
请参阅SETOF
此处的示例:http://nixmash.com/postgresql/returning-tables-from-postgresql-functions-in-sql-and-plpgsql/