Фон
Я использую Oralce в качестве базы данных и встроенную в память базу данных H2 для интеграционных тестов.
Я создал несколько таблиц в H2 и возможность получить некоторые вставленные данные. Однако я не смог получить текущее значение последовательности для последовательности, которую я создал в H2.
Я знаю, что Oracle и H2 не совпадают и используют похожий, но разный синтаксис. Мне также известно, что вы можете определить псевдоним в базе данных H2 в памяти и встроить код java вместо функций Oracle SQL. Это дает мне подсказку, что должен быть обходной путь при получении значения последовательности с использованием синтаксиса Oracle над базой данных H2.
Вопрос
Как мне сделать синтаксис Oracle для выбора текущего значения последовательности, работающей на H2? Нужно ли создавать псевдоним и писать встроенный код java вместо синтаксиса Oracle? Какие у меня варианты?
В тестируемом коде используется следующая гипотетическая, но похожая SQL
select myschema.mysequence.nextval from dual
Но я получаю ошибку, подобную следующей
org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "nextval" not found [42122-199]
Вероятно, очевидно, что это не сработает из-за разницы в синтаксисе. Я ищу обходной путь без необходимости изменения тестируемого кода, который использует синтаксис Oracle.
Обновления
Я использую Spring JDB * EmbeddedDatabaseBuilder 1046 * означает, что я подключаюсь не к отдельному независимому экземпляру базы данных H2, а к экземпляру, созданному на лету, в который я включаю сценарии DDL для создания объектов БД.
Следующий пост вместе с принятым ответом помогли решить его.
Поддерживает ли встроенная база данных Spring разные SQL диалекты?