【问题标题】:UniVerse RetrieVe how do I query a file for all of its columns' values?UniVerse RetrieVe 如何查询文件以获取其所有列的值?
【发布时间】:2010-01-14 22:29:59
【问题描述】:

一种对my self-answered question about finding the column names.的跟进

在 UniVerse 中,您无法查询文件的所有列,除非文件字典中的 @ 短语设置为所有表列。如果不是,您如何查询表中所有列的值?

所以我可以使用以下方法获取总列列表(列名和显示名):

LIST DICT file NAME

这将返回所有列及其显示名称的列表。然后如何查询该表的所有列?

LIST file

只会查询LIST file @id(@id 是@ 中唯一的东西)。

更新 我找到了a blog -- a living breathing person who id using a version of UniVerse older than mine!!,他抱怨同样的事情,但说没有解决方案羞于更新所有列的@,请上帝证明他(Dan Watts)错了。

如果您有一个 200 列的表怎么办 并且您希望 SELECT * 返回所有 200 列?对不起,但你会有 在其中输入所有 200 个列名 “@“ 记录。如果您添加、删除或 重命名一列,你必须 记得编辑那个“@”记录。一世 感受你的痛苦!这个繁琐 方法可以追溯到 UniVerse 的 ODBC 司机,我想他们不能 现在改变它而不会破坏很多 的应用程序。你可以找到 细节描述在高深莫测 UniVerse ODBC 指南中的 IBM 语言。

【问题讨论】:

    标签: u2 universe multivalue-database pick


    【解决方案1】:

    LIST ALL 不适用于 Universe。

    您可以做的一件事是 LIST.ITEM 或 LIST-ITEM,具体取决于您的口味。这将列出文件中包含数据的每个属性,如下所示:

    >LIST.ITEM ACTIVITY
    LIST.ITEM ACTIVITY 06:52:10pm  14 Jan 2010  PAGE    1
    
    1
    001 LEXMARK MULTI PRINT
    002 THD
    003 PJ
    007 10355
    009 Y
    010 CAGNEW
    011 15349
    012 52111
    014 1ý2ý3ý4ý5
    015 Deinstall Make/ModelýDeinstall LocationýSigned Off ByýData/Voice AvailableýR
    elocated Location
    016 1ý2ý3ý4ý5
    
    2
    001 OMN
    002 OMN
    003 PJ
    004 OMN*8437
    005 6
    009 N
    010 CAGNEW
    011 15349
    012 51958
    
    >  
    

    如果你想对数据做点什么,那么编写一个程序并执行以下操作:

    OPEN "ACTIVITY" TO F.ACTIVITY ELSE STOP
    SELECT F.ACTIVITY
    LOOP
        READNEXT ID ELSE EXIT
        READ R.ACTIVITY FROM F.ACTIVITY, ID THEN
        ..................
        END
    REPEAT
    

    【讨论】:

    • 对,那么这个问题的解决方案(获取LIST.ITEM 带有可解析的列名或显示名,或者使用LIST DICT 中列出的列名进行查询)是使用UniBASIC?没关系,这是我接下来要尝试的。我想我会阅读下一批 IBM 文本。
    • 您可以非常快速轻松地编写自己的 LIST 例程。编写一个名为 LISTALL 的程序。它将接受一个参数,例如文件名,并读取文件的字典,获取该文件中的所有字段并动态构建正确的 LIST 命令,然后执行它。
    【解决方案2】:

    LIST.ITEM 文件名。 这将返回所有值

    【讨论】:

      【解决方案3】:

      试试

      LIST file ALL
      

      当然,它实际可以做的数量是有限的,所以它可以归档。你真正想要达到什么目标?

      此外,更一般地,您应该访问Rocket Software's U2 Site。您可以在那里下载完整的手册集。

      还有一个邮件列表,通常可以快速回复以帮助人们。您可以在U2 User Group site 找到详细信息。

      【讨论】:

      • 感谢您的评论,我一直在与 UniVerse 公开讨论 SO,我有 a question 关于学习材料的信息,并且之前找到了这两个资源。 LIST <file> ALL 也不适用于我,我在 10.3 或 10.1(我正在使用的版本)中都找不到关于它的文档。获取RetrieVe: syntax error. Unexpected symbol. Token was "ALL". Scanned command was LIST (table redacted) ALL;
      • 对不起,我其实是 UniData 开发人员,它是 UniVerse 的姊妹产品。尽管它们非常相似,但也有细微的差别。根据有多少 DICT,也许您可​​以手动完成。例如,LIST ...
      • UniVerse 中字典的文件名(通常)存储为它定义的文件的文件名的函数(D_foo for foo)等。我太新了,不知道如何使用问题中命令的输出,并明确获取所有这些列,或者如何查询所有列的等效项,而不必单独说明它们。
      • 当你调用 D_foo 时,即是字典 FILE。这是存储 FOO 的所有字典项目的文件。通过执行 LIST DICT foo,它会显示存储在 D_foo 中的所有字典项目。它在@ID 下列出的所有内容都可以用来代替 等。
      【解决方案4】:

      几点:

      IBM 的 ADO.NET 提供程序 Dan refers to 将不再是 UniVerse(或 UniData)的一部分。去年秋天,IBM U2 业务(包括 UniVerse)被卖给了 Rocket Software,其中有几块没有进行过渡。

      其次,有几个用于词典的标准短语。 @ 是 CRT 的默认列表。 @SELECT 指定从 SQL 样式 SELECT 返回的字段。

      >ED DICT VOC @SELECT
      New record.
      
      ----: I
      0001= PH
      0002= NAME TYPE
      0003= 
      Bottom at line 2.
      ----: FI
      "@SELECT" filed in file "DICT VOC".
      >SELECT * FROM VOC;
      NAME.......... TYPE
      
      VERIFY.SQL     V
      DIVX           V
      INVISIBLE      K
      QUIT.KEY       X
      LEADING        K
      DELETE.LIST    V
      ...
      

      【讨论】:

      • 正如 JackieB 所指出的,关于 ADO.NET 提供程序的陈述是不正确的。请参阅rocketsoftware.com/u2/products/u2-net 明确列出的位置。
      • 您说得对,我了解 Rocket 与 IBM 达成了继续支持此协议的协议。
      【解决方案5】:

      对于大多数 Universe/Pick 安装,程序员通常会构建一些标准化的速记方式,以便更轻松地通过 RECALL/RETRIEVE/ENGLISH/LIST 对数据进行临时访问。我经常在 VOC 文件中看到名称为 F1、F2、F3 等的条目,这些条目看起来像“S”或“D”字典。通常它们是标准的东西,比如 10 个字符宽,左对齐,列标题如“字段 1”。使用“*A1”、“*A2”等似乎是为通用字段名称发展而来的另一种标准。

      您可以在任何列表命令中使用它们,如果文件字典没有 F1(或其他),它将使用 VOC 文件中的一个。所以像这样的命令:

      列表 {文件名} F1 F2 F3

      会工作。这很好,因为您只需设置一次,然后在您不想花时间查找字典名称的任何地方都可以使用它。

      此外,您没有理由不能在 VOC 中设置一个名为“ALL.FIELDS”的组类型字典项,并在其中填充大量“F1”类型的项。它看起来像这样:

      001: PH 002: F1 F2 F3 F4 F5 F6 F7 F8 F9 {....} F200

      这几乎就是您的@dictionary 项的外观,只是其中包含所有正确的字典项。就此而言,您可以在实际文件的字典中构建一个“ALL.FIELDS”字典项,并将具有所有正确格式的正确字典项放入其中。

      需要注意的是,不能保证 UV 字典是完整和准确的,因为实际上没有任何规则可以强制程序员为他们使用的数据字段构建字典项。如果您非常在意,则需要编写一个程序来扫描文件并分析数据以生成有关字段实际工作情况的报告。

      如果您可以达到字典可靠的程度,那么确保每个字段都有一个且只有一个对应的“A”类型字典项是值得的。然后编写一个程序,对所有“A”类型记录的字典执行 SELECT 并构建一个“ALL.FIELD”组字典项来列出所有记录,这很简单。然后确保为不同格式或转换添加备用字典项的每个人只使用“S”、“I”和“D”类型的项。

      就个人而言,我发现在 PICK 环境中执行日常工作时,每个字段都可能会令人讨厌。通常,您想要的东西可以很好地适应 80 列显示,并带有有意义的排序和总计选项。我更希望看到相应的 SQL 内容设置和命名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-05
        • 2010-12-09
        • 2019-02-18
        • 2017-02-28
        相关资源
        最近更新 更多