Как в Informix вложить MULTISET в безымянный ROW?

Учитывая эту схему:

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 (IBM Informix Dynamic Server Version 14.10.FC5DE) в Linux (CentOS Stream, выпуск 8).

Luís Marques 01.04.2022 20:30

Любой разработчик Informix, который мог бы проверить, сообщается ли об этой ошибке?

Luís Marques 09.04.2022 03:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из обходных путей может заключаться в том, чтобы обернуть все это в манекен 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;

Другие вопросы по теме