java - 为什么 Java 中的这个存储过程调用不起作用?

标签 java sql stored-procedures plsql call

这是我的存储过程:

CREATE OR REPLACE PROCEDURE VIEWBROKERS 
(o_username OUT USERS.USERNAME%TYPE) 

AS 
BEGIN
 SELECT USERNAME
 INTO o_username
 FROM USERS
WHERE Role_ID = 3 ;

END VIEWBROKERS;

这是我调用存储过程的方法:

public ResultSet pullBrokers() {
    ResultSet rs = null;
    try {
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        con = DriverManager.getConnection(Messages.getString("OracleUserManagement.0"), Messages.getString("OracleUserManagement.1"), Messages.getString("OracleUserManagement.2")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

        String storedProcedure = "{call VIEWBROKERS(?)}"; 
    CallableStatement statement = con.prepareCall(storedProcedure);

    statement.registerOutParameter(1, java.sql.Types.VARCHAR);
    rs = statement.executeQuery();

    con.commit();
    con.close();

} catch (SQLException e) {
    e.printStackTrace();
}
return rs;
}

最后当我尝试打印结果时:

public class TEST {
    public static void main(String[] args) throws SQLException{
        OraclePullListOfUsers pull = new OraclePullListOfUsers();

        ResultSet rs = pull.pullBrokers();
        try {
            while (rs.next()){
                System.out.println(rs.getString(1));
        }
            } catch (SQLException e) {
                e.printStackTrace();
            }
    }
}

我收到错误消息 ORA-01422:精确获取返回的行数超过请求的行数

这很奇怪,因为表中只有两行数据...

如果有人能给我指明正确的方向,那就太棒了!

最佳答案

看起来你的问题与Java无关,只是在SQL方面。难道表中这两行的 Role_ID=3 吗?

关于java - 为什么 Java 中的这个存储过程调用不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18124074/

相关文章:

SQL - 从数据库中选择最多 'active' 时间

java - 如何制作可执行的 JAR 文件?

java - 在java应用程序中将单词映射到其同义词

mysql - 如何将一行添加到 mysql 结果集以用作 html 选择框中的提示?

sql - 在 SQL 查询中显示串联值

java - 在 UTF-8 MySQL 数据库和 BoneCP 中插入日语字符串

mysql - Mysql 一个存储过程中的多个插入查询

java - 如何本地化 GWT 客户端代码中的枚举值?

java - 在Java中播放音频文件

mysql - 如何通过mysql游标中的索引访问一行?