【问题标题】:Oracle 11g 11.2.0.1 : No more data to read from socketOracle 11g 11.2.0.1:没有更多数据可以从套接字读取
【发布时间】:2015-05-12 17:37:34
【问题描述】:

我正在尝试通过查询调用我的函数“NUMBERINGMACHINE”(SQL> select numberingmachine("param1","param2")from dual;) 包含:

create or replace
function NumberingMachine(numType in varchar2, now in varchar2) return varchar2
is language java name
'NumberingMachine.getSequence(java.lang.String, java.lang.String) return java.lang.String';

然后函数会调用java类(NumberingMachine类)

public class NumberingMachine {


public static String getSequence(String type, String now)  throws SQLException {

    /* Connect to database */

    Connection conn = new OracleDriver().defaultConnection();
    conn.setAutoCommit(false);

    /* construct dynamic sql */

    String selectSql = "SELECT NUMVALUE,NUMLEN,UPDTYPE,UPDDATE FROM M_SEQUENCE WHERE NUMTPCD = ? FOR UPDATE";
    String updateSql = "UPDATE M_SEQUENCE SET NUMVALUE=?, UPDDATE=? WHERE NUMTPCD = ?";

但我得到错误: 没有更多数据可以从 socket 读取。

有人有解决办法吗?

我的 oracle sql 开发者版本:

从 V$VERSION 中选择 *

Oracle 数据库 11g 企业版版本 11.2.0.1.0 - 生产

PL/SQL 版本 11.2.0.1.0 - 生产 “CORE 11.2.0.1.0 生产”

适用于 32 位 Windows 的 TNS:版本 11.2.0.1.0 - 生产

NLSRTL 版本 11.2.0.1.0 - 生产

【问题讨论】:

  • 与您的问题没有直接关系,但是您仍然使用 11.2.0.1 有什么具体原因吗?您可能希望将其修补到 11.2.0.4
  • 能否将您从 Oracle 调用的 Java 函数的源代码添加到您的问题中?
  • 这种类型的错误可能发生在很多事情上,从 JDBC 驱动程序错误到您尝试运行的 Java 代码出现问题。所以我们很难给出一个解决方案。您需要从提供更多详细信息开始,从 Java 源代码开始。加:这个错误是否一直发生。你为什么在没有参数值的情况下调用?当您不在数据库中运行 Java 代码时(比如在 JUnit 测试中),它是否可以工作?
  • @APC 我用 2 个参数调用 select numberingmachine("param1","param2") from dual; ,这个错误只是在我调用函数时发生,..
  • 好的,您应该编辑您的问题以使其更清晰。您发布的通话包含空字符串。如果将函数分配给 PL/SQL 变量而不是从 dual 调用它会发生什么?

标签: java oracle sockets oracle11g oracle-sqldeveloper


【解决方案1】:

您发布的代码不完整,但我认为很容易发现问题:

public static String getSequence(String type, String now)  throws SQLException {

    /* Connect to database */

    Connection conn = new OracleDriver().defaultConnection();
    conn.setAutoCommit(false);

您正试图在 SQL 调用中将其作为 Java 存储过程执行。为此,您必须已经连接到数据库。您无需再次连接。

您的代码应该做的就是执行实际的业务逻辑。虽然看看你作为初学者所拥有的东西,但我认为它应该作为 PL/SQL 而不是 Java 来完成。 PL/SQL 是在数据库中编排 SQL 语句的最佳语言。

【讨论】:

  • 是的,我正在尝试作为 java 存储过程执行,但它之前运行正常.. 问题是否出在连接共享上?我读过这篇文章:orafaq.com/forum/t/47457/2
  • 那篇文章是关于从 Java 调用 PL/SQL 存储过程的,即 在数据库之外。您的示例从 SELECT 语句调用 Java 存储过程,这意味着您已经 在数据库中
猜你喜欢
  • 2012-09-18
  • 2018-01-07
  • 2012-07-16
  • 2017-06-17
  • 2015-02-04
  • 1970-01-01
  • 2011-12-11
  • 2012-03-07
相关资源
最近更新 更多