Эта проблема возникла в пакетной вставке jdbc. Я запросил у источника данных Oracle, проанализировал набор результатов и затем вставил в другой источник данных Oracle. Я получил метаданные подключения и напечатал текущее имя пользователя вместе с URL, оба недействительны.
Но когда дело дошло до пакетного обновления, я получил исключение ora-00942. Я уверен, что все вышеперечисленное прекрасно работает в базе данных. Кто-нибудь сталкивался с этим исключением и можете ли вы дать мне совет?
EDIT:
Хорошо, я получил таблицу с именем photos
, например, в REMOTE_USER
, и запросил ее. Это дало мне набор результатов, а затем я анализирую его, ВСТАВЛЯЙТЕ его в LOCAL_USER.photos
. Я запросил LOCAL_USER.photos
, где я вхожу в PL / SQL Developer. Интересно то, что я мог выполнить команду select
, но не insert
. Ниже приведена часть кода.
conn = datasource.getConnection(); // notice that it was target datasource
DatabaseMetaData connMetaData = conn.getMetaData();
String userName = connMetaData.getUserName();
resultSet = ds.getResultSet();
ResultSetMetaData metaData = resultSet.getMetaData();
int count = metaData.getColumnCount();
String insertSql = generateInsertSql(count, metaData, userName);
// this was generated through metaData , the output should be
// "insert into LOCAL_USER.photos(col1,col2) values(?,...)"
logger.error("insert clause is {}", insertSql);
ps = conn.prepareStatement(insertSql);
conn.setAutoCommit(false);
while (resultSet.next()) { // this was the original datasource
stageTotalNum++;
for (int i = 1; i <= count; i++) {
Object object = resultSet.getObject(i);
dealClobColumn(ps, i, object);
}
ps.addBatch();
if (stageTotalNum % 500L == 0L) {
ps.executeBatch(); // throws batchupdateexception.
ps.clearBatch();
conn.commit();
}
}
ps.executeBatch();
conn.commit();