你必须使用 SELECT FROM
SELECT * FROM get_weather('布拉格');
postgres=# SELECT * FROM 天气;
城市 │ lo │ hi │ d
────────┼────┼────┼────────────
旧金山 │ 46 │ 50 │ 2013-06-06
(1 行)
postgres=# SELECT * FROM get_weather('San Fr');
城市 │ lo │ hi │ d
────────┼────┼────┼────────────
旧金山 │ 46 │ 50 │ 2013-06-06
(1 行)
postgres=#\sf get_weather
创建或替换功能 public.get_weather(城市文本)
返回天气
语言 plpgsql
作为$函数$
宣布
记录记录;
开始
EXECUTE 'SELECT * FROM weather WHERE city = $1' INTO rec USING sity;
返回记录;
结尾;
$函数$
您的示例中有一些可能的优化
- 使用返回查询执行
- 永远不要使用动态查询 - 使用 RETURN QUERY
- 对一行函数使用 SQL 语言而不是 PL/pgSQL
创建或替换函数 get_weather(城市文本)
返回天气 $$
SELECT * FROM weather WHERE city = $1;
$$ 语言 sql;
注意:更新的构建动态查询像你一样!这是 SQL 注入问题的示例。
改为使用
EXECUTE 'SELECT * FROM weather WHERE city = ' || quote_literal(city) INTO rec;
或更好
EXECUTE 'SELECT * FROM weather WHERE city = $1' INTO rec USING city;