【发布时间】: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