[英]How to call a oracle procedure which deletes data using JDBC
我的oracle过程如下所示,用于从数据库中删除旧用户。
create or replace
PROCEDURE UNAVAILABLE_USER (INACTIVE IN NUMBER DEFAULT 90) IS CHK_ACTIVE_USER (NUMOFDAYS IN NUMBER DEFAULT 90) IS
//VARIABLE DECLARATIONS
BEGIN
LOOP
//SOME LOGIC TO FIND WHICH USER ACCOUNTS TO BE DELETED
END LOOP;
LOOP
DELETE FROM SCHEEMA.TABLE1 WHERE userid = ''id'';
DELETE FROM SCHEEMA.TABLE2 WHERE userid = ''id'';
END LOOP;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END UNAVAILABLE_USER;
就oracle程序而言,它在SQL开发人员签入时工作正常并删除数据。 我需要从Java DAO层执行该操作。我一直在尝试执行以下步骤。
connection = UserProfileDAO.getJDBCConnection();
CallableStatement statement = null;
String query = "CALL " + USER_SCHEMA + ".UNAVAILABLE_USER(?)";
statement = connection.prepareCall(query);
statement.setInt(1, Num_Off_Days);
statement.executeUpdate();
它正在部署并正常运行,从Java端没有问题,但是从db端删除了数据
09:54:37,761删除用户内部的[com.alok.user.data.UserProfileDAO](pool-11-thread-1)信息09:55:04,250 INFO [stdout](pool-11-thread-1)调用USER_SCHEMA .UNAVAILABLE_USER(?)
您能帮助我如何诊断问题以及如何与数据库进行交互。任何其他解决方案都将是可取的。
看起来您调用存储过程的JDBC语法有问题; 您应该用大括号括住通话字符串。 您可以尝试这样的方法:
connection = UserProfileDAO.getJDBCConnection();
String call = "{ CALL " + USER_SCHEMA + ".UNAVAILABLE_USER(?) }";
try (CallableStatement statement = connection.prepareCall(call)) {
statement.setInt(1, Num_Off_Days);
statement.execute();
} catch (SQLException e) {
e.printStackTrace();
// or throw something that can be handled
// by the code calling your DAO
throw new RuntimeException(e);
}
已更改的内容包括:
SQLException
可能会被记录下来,并且不会引起异常的注意
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.