U2 UniVerse:更新多值字段

时间:2016-07-28 16:12:35

标签: sqlite tcl multivalue universe u2

我有一个被设置为多值的DICT。打开TCL并执行UPDATE DICT.FILE SET Blah = 'Y'语句时,出现以下错误:

Correlatives are illegal for UPDATE, column "Blah"

如何更新多值字段中的特定属性?

2 个答案:

答案 0 :(得分:0)

在与SQL交互时,技术上认为多值数据库中的关联是不同的表。例如,假设您有一个名为INV的Invoice文件,其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的命令,因为您没有指定要与PartNumber关联的@ID。例如,你不会说......

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的协会。

就UPDATES而言,您需要将DICT文件组织得很好才能使其按预期工作。我建议您阅读Universe SQL参考指南(用户,参考和DBA)。你可以找到那些Here。简而言之,您需要在每个MV协会的DICT中使用PH记录,并且您可能希望了解您的关联是否稳定,不稳定(默认)或具有KEY。但这对于这项练习来说有点深刻。

我在协会LineItem的DICT中添加了PH记录。

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.
>

我希望这会有所帮助。

答案 1 :(得分:0)

更新多值字段的另一种方法是调用UniVerse编辑器ED命令。例如,在TCL中:

ED FILENAME RECORDID

要获取编辑器命令的详细信息,请在TCL中键入HELP

来源:Guide to the UniVerse Editor