U2 UniVerse: обновить многозначное поле

У меня есть DICT, который задан как многозначный. При открытии TCL и выполнении оператора UPDATE DICT.FILE SET Blah = 'Y' я получаю следующую ошибку:

Correlatives are illegal for UPDATE, column "Blah"

Как обновить определенный атрибут в многозначном поле?


person vinco83    schedule 28.07.2016    source источник


Ответы (2)


Ассоциации в многозначной базе данных технически считаются другой таблицей при взаимодействии с SQL. Например, скажем, у вас есть файл счета-фактуры с именем INV и DICT, который выглядит следующим образом.

DICT INV    08:16:43  08-01-16  Page 1

               Type &
Field......... Field. Field........ Conversion.. Column......... Output Depth &
Name.......... Number Definition... Code........ Heading........ Format Assoc..

@ID            D    0                            INV             10L    S
CustNum        D    1                                            5R     S
PartNum        D    2                                            8R     M LineI
                                                                        tem
Quantity       D    3                                            5R     M LineI
                                                                        tem

4 records listed.
>

Вы не сможете использовать команду, которую пытаетесь обновить PartNumber, потому что вы не указываете, с каким @ID вы хотите связать PartNumber. Например, вы бы не сказали...

UPDATE INV SET PartNumber = 123456;

...потому что это не имеет смысла и не соответствует неявному ограничению внешнего ключа.

Кроме того, UPDATE может быть не той командой, которую вы хотите использовать здесь, потому что если у вас есть счет с @ID 123 и вы хотите добавить к нему PartNumber и Quantity, вам нужно сделать что-то вроде этого.

INSERT INTO INV (@ID, PartNum, Quantity) VALUES (123, 123456, 2);

Отсюда вы можете ожидать, что вы можете обновить количество INV 123, PartNum 123456, введя команду...

UPDATE INV SET Quantity = 7 WHERE @ID = 123 WHEN PartNum = 123456;

Но если вы попробуете, вселенная будет жаловаться, что нет ассоциации с именем LineItem.

Что касается ОБНОВЛЕНИЙ, вам нужно действительно хорошо организовать файл DICT, чтобы он работал должным образом. Я бы порекомендовал вам прочитать справочные руководства Universe SQL (User, Ref и DBA). Вы можете найти их здесь. Короче говоря, вам нужны записи PH в ваших DICT для каждой ассоциации MV, и вы, вероятно, захотите понять, является ли ваша ассоциация STABLE, UNSTABLE (по умолчанию) или имеет KEY. Но это немного глубоко для этого упражнения.

Я добавил запись PH в свой DICT для LineItem ассоциации.

DICT INV    08:38:16  08-01-16  Page 1

               Type &
Field......... Field. Field........ Conversion.. Column......... Output Depth &
Name.......... Number Definition... Code........ Heading........ Format Assoc..

@ID            D    0                            INV             10R    S
CustNum        D    1                                            5R     S
PartNum        D    2                                            8R     M LineI
                                                                        tem
Quantity       D    3                                            5R     M LineI
                                                                        tem
LineItem       PH     PartNum
                      Quantity

5 records listed.

И теперь это позволяет мне обновлять количество, как и ожидалось.

>UPDATE INV SET Quantity = 7 WHERE @ID = 123 WHEN PartNum = 123456;
UniVerse/SQL: 1 record updated.
>SELECT @ID, PartNum, Quantity FROM INV WHERE @ID = 123;
INV.......    PartNum.    Quantity

       123      123456           7

1 records listed.
>

Надеюсь, это поможет.

person Van Amburg    schedule 01.08.2016

Другой способ обновить многозначное поле — вызвать редактор UniVerse, команду ED. Например, в ТКЛ:

ED FILENAME RECORDID

Чтобы получить подробную информацию о командах редактора, введите HELP в TCL.

Источник: Руководство по UniVerse Редактор.

person Bill Zelenko    schedule 03.10.2017