Учитывая эту схему:
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);
Следующий запрос кажется мне правильным:
select
t.i,
row(
multiset(
select * from u where u.i = t.i
)
) r
from t
order by t.i
Но это вызывает некоторую неуказанную внутреннюю ошибку:
SQL Error [IX000]: User Defined Routine (collectionsend) execution failed.
Это задокументированное ограничение? Как я могу обойти эту проблему? Я использую IBM Informix Dynamic Server версии 14.10.FC5DE.
Любой разработчик Informix, который мог бы проверить, сообщается ли об этой ошибке?
Один из обходных путей может заключаться в том, чтобы обернуть все это в манекен MULTISET
, как этот, который, кажется, работает:
select multiset(
select
t.i,
row(
multiset(
select * from u where u.i = t.i
)
) r
from t
order by t.i
);
Хотя при повторном распаковывании вспомогательного мультимножества появляется старая ошибка. Это не работает:
select * from table(multiset(
select
t.i,
row(
multiset(
select * from u where u.i = t.i
)
) r
from t
order by t.i
)) t;
Определенно ошибка. В моем случае ваш пример привел к сбою экземпляра Informix (IBM Informix Dynamic Server Version 14.10.FC5DE) в Linux (CentOS Stream, выпуск 8).