从 JAVA 代码中的 ORACLE 表函数中选择多行
Posted
技术标签:
【中文标题】从 JAVA 代码中的 ORACLE 表函数中选择多行【英文标题】:Select multirows from ORACLE table function in JAVA code 【发布时间】:2018-02-03 16:11:54 【问题描述】:在 ORACLE(11g) 中,在某些包中我有一个返回表的函数:
SELECT * FROM TABLE( my_PKG.fnc_myList());
因此它可以完美地在 Oracle SQL Developer 工具中运行,例如。我在 SQL Developer 的 Query Result 中从目标表中获取了行。 问题: 它可以从 JAVA (8) 代码中工作吗? 我尝试了以下代码:
con = DriverManager.getConnection(...);
String SQLQ = "SELECT * FROM TABLE( my_PKG.fnc_myList());";
Statement st =con.createStatement();
rs=st.executeQuery(SQLQ);
while (rs.next())
int id = rs.getInt(0);
String name = rs.getString(1);
....
但得到了错误:
java.sql.SQLSyntaxErrorException: ORA-00900: 无效的 SQL 语句
是不是我错了,或者它根本无法通过 JDBC 驱动程序工作?
【问题讨论】:
将TABLE( my_PKG.fnc_myList())
替换为DUAL
,不更改任何其他内容,看看会发生什么。祝你好运。
为什么要将语句包装在 JDBC 转义中? JDBC 转义仅适用于 JDBC 规范中定义的那些。
【参考方案1】:
您不应使用大括号或分号。如果只调用存储过程,有时会使用大括号。但是你有一个 SELECT 语句(即使它包含一个函数)。而分号仅用于 PL/SQL 或 SQL developer 等工具中用于分隔语句:
con = DriverManager.getConnection(...);
String SQLQ = "SELECT * FROM TABLE( my_PKG.fnc_myList())";
Statement st =con.createStatement();
rs=st.executeQuery(SQLQ);
while (rs.next())
int id = rs.getInt(0);
String name = rs.getString(1);
....
【讨论】:
Ringo Store,您的解决方案按我的预期工作。我的 "" 和 ";" 是“匆忙”的错误。感谢您的帮助,我已经对答案投了赞成票。以上是关于从 JAVA 代码中的 ORACLE 表函数中选择多行的主要内容,如果未能解决你的问题,请参考以下文章
从 Spring JAVA 中的 oracle PLSQL 函数获取结果集时出错