PostgreSQL存储过程调用无返回结果问题求助
问题原因
PostgreSQL里用SQL语言写的PROCEDURE(存储过程)执行SELECT语句时,不会自动把查询结果返回给调用方,这就是你调用后提示成功但看不到数据的原因。PROCEDURE原本更适合做INSERT/UPDATE/DELETE这类修改操作,要是需要返回查询结果,用FUNCTION(函数)更合适。
解决方案一:改用FUNCTION(推荐)
把原来的存储过程改成FUNCTION,定义返回类型为SETOF aeroplanes,这样执行函数就能直接拿到结果:
CREATE OR REPLACE FUNCTION search_airplane_name(name_param varchar) RETURNS SETOF aeroplanes LANGUAGE sql AS $$ SELECT * FROM aeroplanes WHERE name = name_param; $$;
调用的时候用SELECT语句:
SELECT * FROM search_airplane_name('saab');
解决方案二:用PL/pgSQL写PROCEDURE并返回结果
如果一定要用PROCEDURE,可以换成PL/pgSQL语言编写,通过RETURN QUERY返回结果:
CREATE OR REPLACE PROCEDURE search_airplane_name(name_param varchar) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT * FROM aeroplanes WHERE name = name_param; END; $$;
调用时需要在PGAdmin里开启**“显示隐式结果”**(默认可能没开):点击查询工具顶部的Query菜单,选择Show Implicit Results,之后再执行CALL search_airplane_name('saab');就能看到返回的数据了。
内容的提问来源于stack exchange,提问作者user2371684
相关产品推荐
相关产品推荐

