微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-JPA和PostgreSQL:如何调用具有空返回类型的存储过程?

我正在尝试调用执行更新的PL / pgsql函数(语言sql,返回void).我收到此异常:

内部异常:org.postgresql.util.PsqlException:如果没有预期结果,则返回结果.

persistence.xml:

<named-native-query name="Clinic.deactivateByNotFoundInIncomingClinic">
    <query>
        <![CDATA[
            select apply_incoming_clinic_deletions(?)
        ]]>
    </query>
</named-native-query>

道:

public void deactivateByNotFoundInIncomingClinic(long clinicSystemId)
{
    em.createNamedQuery("Clinic.deactivateByNotFoundInIncomingClinic")
            .setParameter(1, clinicSystemId)
            .executeUpdate();
}

救命!

更新:

在GlassFish 3.1.1上使用EclipeseLink通过Postgresql 9.0-801 JDBC 4驱动程序与Postgresql 9.0数据库通信.

解决方法:

不知道这是从哪里来的.问题中缺少您的函数定义.
但是您可以尝试使用plpgsql函数而不是sql.当声明为RETURNS void时,它们的返回类型略有不同.考虑这个演示:

CREATE OR REPLACE FUNCTION f_sql()
  RETURNS void AS
'UPDATE foo SET id = id+1 WHERE id = 34567'
  LANGUAGE sql;

CREATE OR REPLACE FUNCTION f_plpgsql()
  RETURNS void AS
$$
BEGIN
UPDATE foo SET id = id+1 WHERE id = 34567;
END;
$$ LANGUAGE plpgsql;

现在,VOID是虚拟类型.虽然plpgsql函数实际上返回VOID,但sql函数似乎返回NULL.我不确定自己为什么会这样.

db=# SELECT f_sql() IS NULL;
 ?column?
----------
 t

db=# SELECT f_plpgsql() IS NULL;
 ?column?
----------
 f

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐