PostgreSQL:SQL函数如何返回多行?为何当前仅返回单行?
问题原因及解决方法
你的函数返回类型定义为varchar,这是单个字符串类型,PostgreSQL执行时只会提取查询结果的第一行返回,所以调用函数只能拿到单行数据。而直接执行SELECT c_name FROM customers是查询完整的结果集,因此能返回所有行。
修改方案
方案一:返回字符串集合(SETOF varchar)
修改函数的返回类型为SETOF varchar,这样函数可以返回多行字符串:CREATE OR REPLACE FUNCTION get_cust_names() RETURNS SETOF varchar AS $body$ SELECT c_name FROM customers; $body$ LANGUAGE SQL调用方式:
SELECT * FROM get_cust_names();方案二:返回表结构
使用TABLE()语法定义返回的表结构,更贴近直接查询的体验:CREATE OR REPLACE FUNCTION get_cust_names() RETURNS TABLE(c_name varchar) AS $body$ SELECT c_name FROM customers; $body$ LANGUAGE SQL调用方式同样是:
SELECT * FROM get_cust_names();
内容的提问来源于stack exchange,提问作者user20137453
相关产品推荐
相关产品推荐

