【问题标题】:U2 UniVerse: update a multivalue fieldU2 UniVerse:更新多值字段
【发布时间】:2016-07-28 16:12:34
【问题描述】:

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

Correlatives are illegal for UPDATE, column "Blah"

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

【问题讨论】:

    标签: sqlite tcl multivalue universe u2


    【解决方案1】:

    当与 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 的命令,因为您没有指定要与 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;
    

    但是,如果您尝试使用 Universe,则会抱怨没有名为 LineItem 的关联。

    就更新而言,您需要将 DICT 文件组织得井井有条,以使其按预期工作。我建议您阅读 Universe SQL 参考指南(用户、参考和 DBA)。你可以找到那些Here。简而言之,您需要每个 MV 关联的 DICT 中的 PH 记录,并且您可能想了解您的关联是 STABLE、UNSTABLE(默认)还是具有 KEY。但这对于这个练习来说有点深。

    我在我的 DICT 中为 Association LineItem 添加了一条 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.
    >
    

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      ED FILENAME RECORDID
      

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

      来源:Guide to the UniVerse Editor

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多