我试图调用我的功能" 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 - 生产
答案 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语句的最佳语言。