下面是我执行一个动态查询的函数,但我在一个列中得到了这个查询的结果,所有值都以逗号分隔。
CREATE OR REPLACE FUNCTION get_weather(city text)
RETURNS weather AS $$
DECLARE
rec RECORD;
BEGIN
EXECUTE 'SELECT * FROM weather WHERE city = ''' || city || '''' INTO rec;
RETURN rec;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
上述函数的结果:
"("San Francisco",46,50,0.25,1994-11-27)"
Run Code Online (Sandbox Code Playgroud)
所需的输出:

请帮助我,在此先感谢。
你必须使用 SELECT FROM
SELECT * FROM get_weather('布拉格');
postgres=# SELECT * FROM 天气;
城市 ?吗?你好 ?d
????????????????????????????????????
圣佛? 46 ? 50 ? 2013-06-06
(1 行)
postgres=# SELECT * FROM get_weather('San Fr');
城市 ?吗?你好 ?d
????????????????????????????????????
圣佛? 46 ? 50 ? 2013-06-06
(1 行)
postgres=# \sf get_weather
CREATE OR REPLACE FUNCTION public.get_weather(city text)
返回天气
语言 plpgsql
AS $函数$
宣布
记录记录;
开始
EXECUTE 'SELECT * FROM weather WHERE city = $1' INTO rec USING sity;
返回记录;
结尾;
$函数$
您的示例中有一些可能的优化
创建或替换函数 get_weather(city text) 返回天气为 $$ 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;
| 归档时间: |
|
| 查看次数: |
4640 次 |
| 最近记录: |