0

我正在从 MySQL 迁移到 PosgreSql,并且我想在批量更新中调用的 proc/function 有一个小问题。

当 Postgresql 函数似乎总是返回一个值时,即使您声明该值是无效的,我如何才能对它执行更新。

这只是一个简单的例子来说明问题。

CREATE OR REPLACE FUNCTION update_function(
  IN i_id bigint)
  RETURNS void AS $$
  DECLARE
    d_id bigint;
  BEGIN
    UPDATE test_table set id = '' where id = i_id;
  RETURN;
END;
$$ LANGUAGE plpgsql;

如果我使用 SpringTemplate.update() 方法调用它,则会出现错误“org.postgresql.util.PSQLException:预期没有结果时返回结果”。如果您调用 update 并返回一个值,则会引发错误,我理解,所以。

我的问题是,postgresql 函数是否有任何方法不返回值,或者我需要找到另一种方法来进行批量更新?我应该提到,我想使用函数进行更新的原因是在 proc/function 中有许多表正在更新,上面只是一个简单的解释。

另一种方法可以让我解析输入值数组并循环它们。

4

1 回答 1

1

据我了解,您的问题是即使您的函数没有返回,PostgreSQL 也会在结果集中添加一行。一个快速测试表明,事实上,这些都是从 PostgreSQL 返回一个空值。

我所做的(我意识到这可能不是 Spring 的方式)是有一个函数来完成我需要它做的事情,并返回一个有用的值。然后我取该值并将其用于完整性检查目的。例如,我可能会返回更新的总行数(或者可能是最父行的最新版本)并将其交还给应用程序使用。

但是,是的,您需要找到另一种方法来执行此操作。

于 2013-10-28T08:48:45.430 回答