我正在嘗試使用 JdbcTemplate 從 oracle 匿名塊中讀取一個值。這是我的java代碼:
getJdbcTemplate().queryForObject(sql, Boolean.class);
這是sql:
DECLARE
CRS SYS_REFCURSOR;
BEGIN
OPEN CRS FOR SELECT CASE
WHEN
1 > 0
THEN 1
ELSE 0
END
FROM DUAL;
END;
我收到此錯誤:
SQL state [99999]; error code [17166]; Cannot perform fetch on a PLSQL statement: next; nested exception is java.sql.SQLException: Cannot perform fetch on a PLSQL statement: next
uj5u.com熱心網友回復:
public <T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException接受一個 SQL 查詢,該查詢將生成一個包含單行的結果集,并使用回傳的結果集中的該行構造一個所需型別的物件。
代碼:
DECLARE
CRS SYS_REFCURSOR;
BEGIN
OPEN CRS FOR
SELECT CASE WHEN 1 > 0 THEN 1 ELSE 0 END FROM DUAL;
END;
打開一個包含單行結果集的游標;但是,游標在 PL/SQL 匿名塊中作為區域變數保存,并且永遠不會“回傳”給呼叫 PL/SQL 的應用程式代碼。
傳統的方法是在沒有 PL/SQL 包裝器的情況下使用 SQL:
String sql = "SELECT CASE WHEN 1 > 0 THEN 1 ELSE 0 END FROM DUAL";
getJdbcTemplate().queryForObject(sql, Boolean.class);
您可以嘗試DBMS_SQL.RETURN_RESULT從 PL/SQL 塊中使用,但這僅適用于 Oracle 12,并且它沒有與傳統 SQL 查詢相同級別的支持,因此它可能無法正常作業:
DECLARE
crs SYS_REFCURSOR;
BEGIN
OPEN crs FOR
SELECT CASE WHEN 1 > 0 THEN 1 ELSE 0 END FROM DUAL;
DBMS_SQL.RETURN_RESULT(crs);
END;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/435466.html
