我正在尝试使用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发布于 2022-02-25 10:26:19
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);您可以尝试使用PL/SQL块中的DBMS_SQL.RETURN_RESULT,但只能从Oracle12中获得,而且它没有传统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://stackoverflow.com/questions/71251636
复制相似问题