我正在尝试使用 JdbcTemplate 从 oracle 匿名块中读取一个值
I am trying to read a value from oracle anonymous block using JdbcTemplate
我正在尝试使用 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
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
,但这仅适用于 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;
我正在尝试使用 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
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
,但这仅适用于 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;