OracleR2dbcException: [604] [60000] ORA-00604: ошибка на рекурсивном SQL-уровне 1 ORA-01756: нет завершающей кавычки при соединении Oracle и R2DBC

Рейтинг: 0Ответов: 1Опубликовано: 28.04.2023
@Configuration
@Profile("dev")
@EnableR2dbcRepositories
public class DbConfigsDev extends AbstractR2dbcConfiguration {
   
    @Bean
    @Override
    public ConnectionFactory connectionFactory() {
        return new OracleConnectionFactoryProviderImpl()
                .create(ConnectionFactoryOptions.builder()
                        .option(ConnectionFactoryOptions.HOST, "localhost")
                        .option(ConnectionFactoryOptions.PORT, 1521)
                        .option(ConnectionFactoryOptions.DATABASE, "orcl.local")
                        .option(ConnectionFactoryOptions.USER, "C##TESTUSER")
                        .option(ConnectionFactoryOptions.PASSWORD, "testpassword")
                        .option(Option.valueOf("oracle.net.CONNECT_TIMEOUT"), 5000)
                        .option(Option.valueOf("oracle.jdbc.ReadTimeout"), 5000)
                        .build());
    }
}

и репозиторий

@Repository
@RequiredArgsConstructor
public class EcologyRepository {
    final ConnectionFactory connectionFactory;

    @SneakyThrows
    public Mono<EcologyConsumer> fetchDataByCadastre(String cadastre) {

        Mono.from(connectionFactory.create())
                .flatMapMany(connection ->
                        Flux.from(connection.createStatement("SELECT 'Hello, Oracle' FROM sys.dual")
                                        .execute())
                                .flatMap(result ->
                                        result.map((row, metadata) -> row.get(0, String.class)))
                                .concatWith(Mono.from(connection.close()).cast(String.class)))
                .subscribe(System.out::println);

        return Mono.empty();
    }
}

но в итоге получаю:

reactor.core.Exceptions$ErrorCallbackNotImplemented: oracle.r2dbc.impl.OracleR2dbcExceptions$OracleR2dbcException: [604] [60000] ORA-00604: ошибка на рекурсивном SQL-уровне 1 ORA-01756: нет завершающей кавычки

ЗЫ. как я понимаю проблема в соединении, но как правильно это готовить?

Заранее благодарен!

Ответы

▲ 0

проблему наше, все дело было с мультиязычностью ещё точнее там у меня был изменен дефольтная локаль Locale.setDefault(new Locale("uz")); и в конечном итоге это влияло на работу с БД Oracle. З.Ы. В моем случае, ошибка ORA-01756 возникает, когда Oracle обнаруживает незавершенную кавычку в SQL-запросе. Это мог быть произойти, если в запросе используются символы, которые обрабатываются по-разному в разных локалях, и установленная локаль не соответствует ожидаемой локали в запросе.