sql >> Database teknologi >  >> RDS >> Oracle

MyBatis Batch Insert/Update for Oracle

Det accepterede svar er ikke den anbefalede måde at håndtere batchoperationer på. Den viser ikke sande batch-sætninger, da batch-udførelsestilstanden skal bruges, når du åbner en session. Se dette indlæg, hvor en kodebidragyder anbefalede, at den korrekte måde at batchopdatering (eller indsættelse) er at åbne en session i batch-tilstand og gentagne gange kalde opdatering (eller indsætte) for en enkelt post.

Her er hvad der virker for mig:

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();
    }
}

Brug ikke foreach i din opdatering/indsættelse, og sørg for, at den kun opdaterer/indsætter en enkelt post. Jeg løb ind i uløselige orakelfejl ved at gøre det i henhold til det accepterede svar (ugyldigt tegn, udsagn ikke afsluttet osv.). Som det linkede indlæg indikerer, er opdateringen (eller indsættelsen), der vises i det accepterede svar, faktisk kun en kæmpe sql-sætning.



  1. Er substr eller LIKE hurtigere i Oracle?

  2. Sådan bruger du KNN Machine Learning Model med 2UDA – PostgreSQL og Orange (del 1)

  3. Multi-Statement TVF'er i Dynamics CRM

  4. Hvorfor enhver lille virksomhed har brug for en database