可能在这里遗漏了一些微不足道的东西,但我在Oracle 10g上运行的Java应用程序中有一个函数,它在BEGIN中生成一堆insert和delete语句......;结束;块。
当我执行该语句时,它运行时没有错误,但是没有将值插入/删除到数据库中。如果我将要运行的SQL复制到SQL开发人员并执行它,它将按预期工作。
示例SQL ...
BEGIN
INSERT INTO tablea_archive (col1,col2,col3)
SELECT col1,col2,col3 FROM tablea;
DELETE FROM tablea;
INSERT INTO tableb_archive (col1,col2,col3)
SELECT col1,col2,col3 FROM tableb;
DELETE FROM tableb;
END;
我尝试使用execute()和executeUpdate()通过准备好的,callabale和普通语句运行代码,但没有快乐。
有谁可以指出我做错了什么?
答案 0 :(得分:1)
我会尝试像
这样的东西BEGIN
INSERT INTO tablea_archive (col1,col2,col3)
SELECT col1,col2,col3 FROM tablea;
RAISE_APPLICATION_ERROR(-20001,'Inserted '||sql%rowcount||' rows');
END;
您的错误处理应该为您提供某种形式的消息,说明插入INSERT的行数。如果您没有错误记录,请查看recording errors on the database end
我怀疑数据库错误或架构错误。
答案 1 :(得分:0)
此代码段有效。可能它可以帮助你:
String plsql = "BEGIN :myresult := dbms_random.random ; END;";
OracleDriver oracledrv = new OracleDriver();
Connection con = oracledrv.connect(connstr, new Properties());
for (int i = 0 ; i < 1000 ; i++ ) {
CallableStatement cb = con.prepareCall(plsql);
cb.registerOutParameter("myresult", Types.INTEGER);
cb.execute();
System.out.println("random ->" +cb.getInt("myresult"));
cb.close();
}
con.close();