У меня есть эта процедура в базе данных:
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;
И этот код, который вызывает эту функцию:
private final String PAGE_RELEVANCE_SQL = "SELECT replacePageRelevance(?,?::REAL)";
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());
}
}
Когда я выполняю пакет, значения вставляются или заменяются в таблице, но после этого я получаю исключение, сообщающее, что A result was returned when none was expected.
Я не знаю, что не так, если я так называю процедуру или саму процедуру. В чем может быть проблема и как ее решить?
Вызов процедуры с SELECT
является правильным / единственным способом?