Oracle 11g 11.2.0.1:无法从套接字读取数据

时间:2015-03-11 03:21:28

标签: java oracle sockets oracle11g oracle-sqldeveloper

我试图调用我的功能" NUMBERINGMACHINE"通过查询(SQL>选择numberingmachine(" param1"," param2")来自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 = ?";

但我收到错误: 没有更多数据要从套接字读取。

有没有人有解决方案?

我的oracle sql开发者版本:

  

SELECT * FROM V $ VERSION

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

PL / SQL版本11.2.0.1.0 - 生产 "核心11.2.0.1.0生产"

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

NLSRTL版本11.2.0.1.0 - 生产

1 个答案:

答案 0 :(得分:0)

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

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语句的最佳语言。