Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wstawianie/aktualizacja wsadowa MyBatis dla Oracle

Przyjęta odpowiedź nie jest zalecanym sposobem obsługi operacji wsadowych. Nie pokazuje prawdziwych instrukcji wsadowych, ponieważ podczas otwierania sesji należy używać trybu wsadowego. Zobacz ten post, w którym współautor kodu zalecił, że prawidłowym sposobem aktualizacji wsadowej (lub wstawiania) jest otwarcie sesji w trybie wsadowym i wielokrotne wywoływanie aktualizacji (lub wstawianie) dla pojedynczego rekordu.

Oto, co działa dla mnie:

public void updateRecords(final List<GisObject> objectsToUpdate) {
    final SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession(ExecutorType.BATCH);
    try {
        final GisObjectMapper mapper = sqlSession.getMapper(GisObjectMapper.class);
        for (final GisObject gisObject : objectsToUpdate) {
            mapper.updateRecord(gisObject);
        }
        sqlSession.commit();
    } finally {
        sqlSession.close();
    }
}

Nie używaj foreach w aktualizacji/wstawieniu i upewnij się, że aktualizuje/wstawia tylko jeden rekord. Wpadałem na nierozwiązywalne błędy wyroczni, robiąc to zgodnie z zaakceptowaną odpowiedzią (nieprawidłowy znak, niekończąca się wypowiedź itp.). Jak wskazuje link, aktualizacja (lub wstawka) pokazana w zaakceptowanej odpowiedzi jest w rzeczywistości tylko gigantyczną instrukcją sql.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Typy danych Oracle

  2. Zmień nazwę tabeli lub widoku Oracle

  3. Tworzenie wyzwalacza sekwencji Oracle

  4. Czy istnieje sposób na uzyskanie numeru wiersza w Mysql, takiego jak rownum w Oracle?

  5. Konwertuj Unixtime na Datetime SQL (Oracle)