如何在postgres

时间:2016-02-02 13:13:38

标签: postgresql

我在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;

1 个答案:

答案 0 :(得分:0)

如果函数对特定表进行查询,您可以尝试返回复合类型或使用RETURN SETOF table_name。如果没有,您可以创建一个表/类型来定义返回类型。

请参阅SETOF此处的示例:http://nixmash.com/postgresql/returning-tables-from-postgresql-functions-in-sql-and-plpgsql/