Informix - обновить столбец SET с помощью результатов выбора - PullRequest
1 голос
/ 28 марта 2011

У меня есть таблица со столбцом коллекции. Я хочу сделать выборку, которая возвращает несколько целых чисел и поместить результат в этот столбец коллекции, однако я не могу найти синтаксис, чтобы сделать это через SQL. Я сделал это, написав процедуру SQL, которая делает то же самое (помещает результаты SELECT в переменную SET и возвращает переменную), однако я пытаюсь сделать то же самое без функций. Можно ли это сделать?

Сначала я создаю временную таблицу:

CREATE TEMP TABLE table1 (
  id INTEGER
, col2 SET(INT NOT NULL)
)

Затем я заполняю его данными испытаний:

INSERT INTO table1 (id) VALUES (1);
INSERT INTO table1 (id) VALUES (2);

А теперь это работает:

UPDATE table1 SET col2 = SET{1,2};

... но я пытаюсь сделать это, и это не работает:

UPDATE table1 SET col2 = (SELECT id FROM table1) WHERE id = 1;

Возвращает эту ошибку:

[Error Code: -9632, SQL State: IX000]  Value does not match the type of column (col2).

Ответы [ 2 ]

1 голос
/ 30 марта 2011

Этого можно добиться, используя MULTISET и ITEM ключевое слово
следующий пример будет работать:

CREATE TEMP TABLE table1 (
  id INTEGER
  ,col2 MULTISET(INT NOT NULL)
);

INSERT INTO table1 (id) VALUES (1);
INSERT INTO table1 (id) VALUES (2);

UPDATE table1 SET col2 = MULTISET{1,2};

UPDATE table1
   SET col2 = MULTISET(SELECT ITEM id FROM table1)
WHERE id = 1;

Помните о различиях между SET и MULTISET

select set{1,2,1,3,1} from systables where tabid=1;

возвращает SET {1,2,3}

select multiset{1,2,1,3,1} from systables where tabid=1;

возвращает MULTISET {1,2,1,3,1}

1 голос
/ 29 марта 2011

Манипулирование типами SET в чистом SQL - это боль.

Ваше ОБНОВЛЕНИЕ пытается присвоить INTEGER для SET OF INTEGER, и ошибка говорит: «Вы не можете этого сделать».1004 * Вы должны быть в состоянии сделать:

UPDATE table1
   SET col2 = SET { (SELECT id FROM table1 WHERE id = 1) }
 WHERE id = 1;

Однако я не уверен, что правильная модификация состоит в том, чтобы получить более одного значения в наборе;внутреннее ГДЕ там не праздно.

...