簡體   English   中英

JPA和PostgreSQL:如何使用void返回類型調用存儲過程?

[英]JPA & PostgreSQL: How do I call a stored procedure with void return type?

我正在嘗試調用執行更新的PL / pgSQL函數(語言sql,返回void)。 我得到了這個例外:

Internal Exception: org.postgresql.util.PSQLException: A result was returned when none was expected.

persistence.xml中:

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

DAO:

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

程序

DROP FUNCTION updatename(bigint);
CREATE OR REPLACE FUNCTION updatename(var_id bigint) 
RETURNS void AS $$
DECLARE


BEGIN
    update person set
        name ='lucas'
    where id=var_id;

RETURN;

END;$$
LANGUAGE 'plpgsql';

//調用程序

Long id=50;
Query  query = emProvider.get().createNativeQuery("SELECT updatename(?1)") ;
        query.setParameter(1,id);
        query.executeUpdate();

將DAO代碼更改為此工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM