Я играю с тем, что возможно в Informix, связанном с таблицами, производными от коллекций, и вложенными коллекциями. Учитывая эту схему:
create table t (i int);
create table u (i int, j int);
insert into t values (1);
insert into t values (2);
insert into u values (1, 10);
insert into u values (2, 20);
Я попробовал следующий запрос:
with x as (
select
t.i,
multiset(
select * from u where u.i = t.i
) m
from t
order by t.i
)
select *
from x, lateral(table(x.m));
Запуск его в первый раз из редактора SQL Dbeaver приводит к этой ошибке:
SQL Error [IX000]: The current transaction has been rolled back due to an internal error.
Запуск его во второй раз приводит к этой ошибке:
SQL Error [IX000]: System or internal error
Кажется, соединение устарело, и мне нужно повторно подключиться, чтобы выполнить дальнейшие запросы.
Похоже, это ошибка в Informix, но как мне обойти эту проблему? Я использую IBM Informix Dynamic Server версии 14.10.FC5DE.
Кажется, проблема связана с этим пунктом ORDER BY
. Этот запрос работает так, как ожидалось:
with x as (
select
t.i,
multiset(
select * from u where u.i = t.i
) m
from t
)
select *
from x, lateral(table(x.m));
Создание следующего вывода:
|i |m |i |j |
|---|-----------------------------------------|---|---|
|1 |[IfxStruct. Type: row ( i int , j int ) ]|1 |10 |
|2 |[IfxStruct. Type: row ( i int , j int ) ]|2 |20 |
(Не обращайте внимания на текст IfxStruct
. Это просто Dbeaver, который еще не может печатать эти типы)
Это, по крайней мере, ошибка (также может быть каким-то образом не поддерживается). В моем случае это привело к приостановке внутреннего потока сеанса (Informix 14.10.FC5DE, Linux CentOS Stream, выпуск 8). Журнал показывает: Результаты: Исключение поймано. Тип: MT_EX_OS, Контекст: память.