【发布时间】:2016-06-04 16:42:49
【问题描述】:
调用不返回任何内容的函数时出现 Java 异常:
org.postgresql.util.PSQLException: A CallableStatement was executed with nothing returned.
Java 代码类似这样:
// Procedure call.
CallableStatement proc = con.prepareCall("{ ? = call doquery ( ? ) }");
proc.registerOutParameter(1, Types.Other);
proc.setInt(2, 33434);
proc.execute();
ResultSet results = (ResultSet) proc.getObject(1);
while (results.next()) {
// do something with the results...
}
results.close();
proc.close();
查询很简单:
select * from table where idTable = 33434;
查询不返回任何值,因为我在 postgresql DB 中查找的内容不存在。一个 sql 查询就是这样,我们并不总是得到一些回报。
你如何处理这种情况?
PS.- Postgresql 函数:
CREATE OR REPLACE FUNCTION doquery(_idTable bigint)
RETURNS TABLE(idTable bigint, name varchar) AS
$BODY$
DECLARE
searchsql text := '';
BEGIN
searchsql := 'SELECT * FROM table
WHERE idTable = ' || _idTable;
RETURN QUERY EXECUTE searchsql;
END
$BODY$
LANGUAGE plpgsql;
【问题讨论】:
-
显示使用你的存储过程,你需要确保你的存储过程返回一些东西
-
我已经附加了存储过程!
-
我不明白为什么你需要一个存储过程来做这样一个简单的查询,你能澄清一下吗?
-
这只是一个实验,我需要的是一个复杂的动态查询。如果这个简单的例子行不通,我该怎么做一个复杂的任务呢?那将是浪费时间!
标签: java postgresql stored-procedures