当前位置: 首页 > 面试题库 >

无法对PLSQL语句执行访存:下一步

唐海阳
2023-03-14
问题内容

仓库程序

CREATE OR REPLACE
PROCEDURE ADDITION
  (
    A IN NUMBER ,
    B IN NUMBER ,
    C OUT NUMBER )
AS
BEGIN
  C := A+B;
  dbms_output.put_line(c);
END ADDITION;

JDBC程序

 cstmt = conn.prepareCall("BEGIN addition(?, ?,?); END;");
  cstmt.setInt(1, 10);
  cstmt.setInt(2, 85);
  cstmt.registerOutParameter(3, java.sql.Types.INTEGER);
  ResultSet rs = cstmt.executeQuery();
  while(rs.next()){
  int c =rs.getInt("c");
    System.out.println(c);
  }

在执行上述程序时,程序出错。

Eroor:

java.sql.SQLException: Cannot perform fetch on a PLSQL statement: next
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)
    at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:192)
    at stored_procedure.main(stored_procedure.java:32)

问题答案:

executeQuery()设计用于与返回游标(通常是SELECT查询)的sql语句一起使用。您的调用不会返回游标,因此不适合与此方法一起使用。您应该只使用execute(),然后从输出参数获取值:

cstmt = conn.prepareCall("BEGIN addition(?, ?,?); END;");
cstmt.setInt(1, 10);
cstmt.setInt(2, 85);
cstmt.registerOutParameter(3, java.sql.Types.INTEGER);
cstmt.execute();
int c = cstmt.getInt(3);
System.out.println(c);


 类似资料:
  • 问题内容: 我在Hibernate尝试了简单的程序,并发现了一堆异常。 我不知道到底是什么问题。 我有三个课程-书籍,阅读器和使用。最后一个是将前两个绑定为一对多。 这是我的: 这是异常消息: 的摘要: DB上的所有表均已创建,但为空。一切都还好。有什么建议么? 如何解决这个麻烦? 问题答案: 在MySQL中, USING 是保留字。 因此,只需使用实体上的注释来重命名表即可。就像是 我假设您有一

  • 我得到以下错误,当我尝试添加一个应用程序和应用程序设置。以下是详细的错误消息: 下面是junit测试 这是保存应用程序和设置的方法 这些是DAO类。 这是应用刀 为什么我会得到上面的错误?如果你们需要更多的信息,请告诉我。 更新

  • 我得到了"org.springframework.dao.数据完整性违反异常:无法执行语句;SQL[n/a];约束[null];嵌套异常是org.hibernate.exception.约束违反异常:无法执行语句"异常,同时将对象保存到存储库。 要求:计划将只有一个Cpricing对象,因此我添加了@OneToOne映射。下面是预期的表结构。 我在实体类中有以下代码更改: 当试图保存包含CPric

  • 本文向大家介绍plsql语法,包括了plsql语法的使用技巧和注意事项,需要的朋友参考一下 示例 procedure-name指定过程的名称。 [OR REPLACE]选项允许修改现有过程。 可选参数列表包含参数的名称,模式和类型。IN表示将从外部传递值,而OUT表示将使用此参数返回过程外部的值。如果未指定任何模式,则假定参数为IN模式。 在声明部分,我们可以声明将在正文部分使用的变量。 proc

  • 问题内容: 我正在尝试运行此代码并删除MySQL数据库中的某些记录,但出现此错误: 这是我目前拥有的代码: 我能够运行select *查询没有问题,但是当我尝试运行DELETE查询时,它并没有解决。我已经在MySQL工作台中运行了此命令,并且该命令有效,但是当我使用Java时,该命令不起作用。 问题答案: 您使用它代替。 仅用于返回数据的语句。适用于不会返回日期的日期(更新,插入,删除,我相信诸如

  • 问题内容: 我在理解同步关键字功能时遇到了一些麻烦。根据Java文档和其他教程,可以说,当使用synced关键字时,在两个线程之间不可能在该方法的语句之间进行交织。 但是,请参见下面的代码。 据我了解,程序输出应始终以线程0和线程1不应交错的方式进行。但是多次执行这段代码后,我得到了交错输出。 请帮助我理解问题。 提前致谢.. 问题答案: 的关键字防止两个线程运行的是在同一对象上同步代码。 您的每