2016-07-28 2 views
2

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

Correlatives are illegal for UPDATE, column "Blah" 

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

ответ

0

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

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

UPDATE INV SET PartNumber = 123456; 

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

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

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

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

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

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

Что касается UPDATES go, вам нужно, чтобы ваш DICT-файл был хорошо организован, чтобы заставить его работать должным образом. Я бы порекомендовал вам прочитать справочники SQL-справочника Universe (User, Ref и DBA). Вы можете найти их Here. Короче говоря, вам нужны записи 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. 
> 

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

0

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

ED FILENAME RECORDID 

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

Источник: Guide to the UniVerse Editor.