从JAVA代码中的ORACLE表函数中选择多行

时间:2018-02-03 16:11:54

标签: java oracle jdbc resultset

在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驱动程序根本无法工作?

1 个答案:

答案 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);
        ....
    }