代码之家  ›  专栏  ›  技术社区  ›  Sergey Lotvin

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

  •  -1
  • Sergey Lotvin  · 技术社区  · 7 年前

    在ORACLE(11g)中,在某些包中,我有一个返回表的函数:

    SELECT * FROM TABLE( my_PKG.fnc_myList());
    

    所以它在 Oracle SQL开发人员 例如,工具。我从中的目标表中获取了行 查询结果 属于 SQL开发人员 . 问题: 它能从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 回复  |  直到 7 年前
        1
  •  4
  •   Ringo Store    7 年前

    您不应该使用大括号或分号。如果只调用存储过程,有时会使用大括号。但您有一个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);
            ....
        }