簡體   English   中英

無法調用 Java 中的存儲過程

[英]Can't call stored procedure in Java

我在PostgreSQL寫了一個stored procedure 我嘗試在 java 中使用此過程,它拋出 ' org.postgresql.util.PSQLException: ERROR: cursor " < unnamed portal 1 > " does not exist ' 異常。

程序:

CREATE OR REPLACE FUNCTION subject_show(session_id CHARACTER VARYING,OUT result_cursor refcursor, OUT total_record INTEGER, OUT total_search_record INTEGER  ) AS $$
        BEGIN
            total_record:=23;
            total_search_record:=22;
            OPEN result_cursor FOR SELECT "ID","NAME"   FROM "SUBJECTS" ;
    END;
    $$ LANGUAGE plpgsql;

調用程序,在java

...

callableStatement = conn.prepareCall("{ call subject_show(?,?,?,?) }");
callableStatement.setString(1, sessionID);
callableStatement.registerOutParameter(2, Types.REF);
callableStatement.registerOutParameter(3, Types.INTEGER);
callableStatement.registerOutParameter(4, Types.INTEGER);
callableStatement.executeUpdate();
System.out.println(callableStatement.getObject(3));
System.out.println(callableStatement.getObject(4));
rs = (ResultSet) callableStatement.getObject(2);
...

我發現,只有在您關閉自動提交功能后,我才能這樣做。 游標僅在一個事務中有效,因此一旦驅動程序提交,游標就不再有效。 因此,我收到的錯誤。

我通過將 @Transactional 添加到 function 在我的代碼中解決了這個問題

暫無
暫無

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

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