Как я могу использовать insertInto JOOQ с несколькими значениями?(База данных Sybase) - PullRequest
0 голосов
/ 24 мая 2019

Я получаю исключение при попытке вставить несколько значений в базу данных Sybase с помощью JOOQ:

Java-код:

dsl.insertInto(ACTIVITY).columns(ACTIVITY.ACTIVITY_NO, ACTIVITY.SUMMARY)
    .values(1, "summary 1")
    .values(2, "summary 2")
    .execute()

Превращенов SQL:

org.jooq.tools.LoggerListener - Executing query          : insert into [activity] ([activity_NO], [summary]) select * from (select ?, ?) x union all select * from (select ?, ?) x
org.jooq.tools.LoggerListener - -> with bind values      : insert into [activity] ([activity_NO], [summary]) select * from (select 1, 'summary 1') x union all select * from (select 2, 'summary 2') x

insert into ACTIVITY (ACTIVITY_NO, SUMMARY)
select *
from (select 1, 'summary 1') x
union all
select *
from (select 2, 'summary 2') x

Результаты в исключении:

org.jooq.exception.DataAccessException: SQL [insert into [activity] ([activity_NO], [summary]) select * from (select ?, ?) x union all select * from (select ?, ?) x]; A derived table expression may not have null column names. Use a derived column list in the derived table definition or name the column expressions in the SELECT target list.

Исключение происходит из базы данных Sybase: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32300.1550/html/sqlug/sqlug423.htm

Правильный SQL будет:

insert into ACTIVITY (ACTIVITY_NO, SUMMARY)
select *
from (select 1 as ACTIVITY_NO, 'summary 1' as SUMMARY) x
union all
select *
from (select 2 as ACTIVITY_NO, 'summary 2' as SUMMARY) x

Как я могу решить эту проблему с JOOQ?

...