【发布时间】:2011-09-01 17:16:51
【问题描述】:
我在数据库中有这个程序:
CREATE OR REPLACE FUNCTION replacePageRelevance(id INT, value REAL) RETURNS VOID AS $$
BEGIN
INSERT INTO pageRelevance VALUES (id,value);
EXCEPTION WHEN unique_violation THEN
UPDATE pageRelevance SET relevance = value WHERE pageId = id;
END
$$
LANGUAGE plpgsql;
以及调用此函数的这段代码:
try (CallableStatement cstm = conn.prepareCall(PAGE_RELEVANCE_SQL)) {
for (Map.Entry<Integer, Double> entry : weightMap.entrySet()) {
cstm.setInt(1, entry.getKey());
cstm.setDouble(2, entry.getValue());
cstm.addBatch();
}
cstm.executeBatch();
} catch (SQLException e) {
LOGGER.error("Error discovering pages relevance: " + e.getNextException());
}
}
这不起作用,我收到一条错误消息,通知 function replacepagerelevance(integer, double precision) doesn't exists.。为什么?
生成的调用是这样的:SELECT replacePageRelevance('882','8.0')。如果我在 pgAdmin 中执行它,它可以工作,但不是来自 Java。
【问题讨论】:
标签: java postgresql stored-procedures plpgsql sqlexception