【发布时间】:2016-10-09 14:08:38
【问题描述】:
我的 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) CALL USER_SCHEMA.UNAVAILABLE_USER(?)
您能否帮助我如何诊断问题以及它与 DB 的交互方式。任何其他解决方案都将是可观的。在此先感谢。
【问题讨论】:
-
连接是否处于自动提交模式?如果否,您的代码必须在删除后进行提交:
connection.commit();在末尾追加这一行,无论自动提交状态如何,它都会起作用。 -
是的..它处于自动提交模式
-
我还尝试在事务之前将自动提交模式设置为 false .. 这也不起作用..
-
您能否尝试从您的过程中删除整个异常部分并从 Java 中执行它。这样你就可以确定它在从 Java 执行时没有遇到任何异常。
-
您的应用数据库用户是否拥有
DELETE权限?
标签: java oracle hibernate stored-procedures jdbc