Анонимный блок, вызываемый через JDBC, выполняется без ошибок, но не запускается - PullRequest
2 голосов
/ 09 июня 2011

Возможно, здесь что-то упущено, но в моем Java-приложении, работающем на Oracle 10g, есть функция, которая генерирует несколько операторов вставки и удаления в BEGIN ...;КОНЕЦ;блок.

Когда я выполняю инструкцию, она выполняется без ошибок, но значения не вставляются / не удаляются в базу данных.Если я скопирую 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;

Я попытался запустить код через подготовленный, callabale и обычные операторы с execute () и executeUpdate () и без радости.

Кто-нибудь может указать, что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Я бы попробовал что-то вроде

BEGIN
  INSERT INTO tablea_archive (col1,col2,col3)
  SELECT col1,col2,col3 FROM tablea;
  RAISE_APPLICATION_ERROR(-20001,'Inserted '||sql%rowcount||' rows');
END;

Ваша обработка ошибок должна дать вам некоторую форму сообщения о том, сколько строк вставлено при вставке.Если вы не ведете журнал ошибок, посмотрите на ошибки записи в конце базы данных

Я бы заподозрил либо неверную базу данных, либо неверную схему.

0 голосов
/ 09 июня 2011

Этот фрагмент кода работает. Может быть, это может помочь вам:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...