繁体   English   中英

如何调用使用JDBC删除数据的Oracle过程

[英]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); 
}

已更改的内容包括:

  • 该代码现在使用try-with-resources,以便即使抛出异常也可以正确关闭callable语句。
  • 现在,执行该语句时可能会抛出的SQLException可能会被记录下来,并且不会引起异常的注意

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM