Ассоциации в многозначной базе данных технически считаются другой таблицей при взаимодействии с 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