postgres函数灵活查询返回

时间:2016-11-11 16:31:25

标签: function postgresql-9.4

创建返回多行的函数的灵活方法是什么? 我正在开发pg9.4数据库,并且在我的函数中修改SELECT语句中的列数并不罕见。 但是,当我学习了plpgsql时,RETURNS被指定为SETOF。只要SELECT是*或指定查询中所有表的列,这就没问题。

有没有办法告诉RETURNS在SELECT语句中使用SETOF列,或者沿着这些行使用某些东西?我看到了我 可以使用RETURNS TABLE return multiple select,但我希望有更动态的东西。 感谢

CREATE TABLE business
(
  retailerid integer NOT NULL,
  retailername character varying(250) NOT NULL,
  CONSTRAINT pkretailerid PRIMARY KEY (retailerid)
)
WITH ( OIDS=FALSE );
INSERT INTO business(retailerid, retailername)
VALUES(1,'Mc Donalds');
INSERT INTO business(retailerid, retailername)
VALUES(2,'Burger King');

CREATE OR REPLACE FUNCTION getretailers()
  RETURNS SETOF business AS
$BODY$
 BEGIN
 RETURN QUERY 
    SELECT retailerid, retailername FROM business;
 END
 $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000;

SELECT getretailers(); -- works
drop function getretailers();

CREATE OR REPLACE FUNCTION getretailers()
  RETURNS SETOF business AS
$BODY$
 BEGIN
 RETURN QUERY 
    SELECT retailername FROM business;
 END
 $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000;
SELECT getretailers(); -- err, structure of query does not match return type

0 个答案:

没有答案