在ORACLE(11g)中,在某个包中我有一个返回表的函数:
SELECT * FROM TABLE( my_PKG.fnc_myList());
因此,它可以在 Oracle SQL Developer 工具中完美运行。我从 SQL Developer 的查询结果中获取了目标表中的行。 题: 它可以使用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驱动程序根本无法工作?
答案 0 :(得分:4)
你既不应该使用牙套也不应该使用分号。如果仅调用存储过程,有时会使用大括号。但是你有一个SELECT语句(即使它包含一个函数)。分号仅在PL / SQL或SQL开发人员等工具中用于分隔语句:
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);
....
}