【发布时间】:2015-04-08 12:01:27
【问题描述】:
我有以下用 PostgreSQL 9.3 编写的存储过程,运行良好:
CREATE OR REPLACE FUNCTION getColor(i INT)
RETURNS VARCHAR AS $varColor$
DECLARE varColor varchar;
BEGIN
select color into varColor FROM colors where id = i;
return varColor;
END;
$varColor$ LANGUAGE plpgsql;
事实上,当我在 pgAdmin 中执行 select getColor(2) 时,我得到了预期值。
我试图从Java(简化版)这样称呼它:
String call = "{ call getColor(?,?) }";
CallableStatement cstmt = connection.prepareCall(call);
cstmt.setInt(1, 2);
cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
boolean hadResults = cstmt.execute();
问题是hadResults 始终为空。
有什么想法吗?
【问题讨论】:
-
CallableStatement用于“真正的”存储过程。使用PreparedStatement和executeQuery()运行select getColor(2)可以更好地调用postgres 函数 -
在 postgresql 中,使用 create 函数语句 sqlines.com/postgresql/stored_procedures_functions 创建存储过程
-
@user1820620:这是“存储过程”,而不是“存储过程”。而
CREATE FUNCTION创建了一个函数,几乎但不完全相同。 -
谢谢,那么如何在postgresql中创建一个“真正的”存储过程呢?在链接sqlines.com/postgresql/stored_procedures_functions 中没有区别
-
该链接完全错误。 Postgres 没有“存储过程”,因此您无法创建“真正的”存储过程。声称一个函数不能返回多个结果集也是错误的。这是可能使用参考游标。您必须使用引用游标返回结果的说法也是完全错误的。你应该坚持官方手册。
标签: java postgresql stored-procedures