2017-07-03 186 views
1

在我的办公室里我们有一台老式的AS400,几乎没有人知道任何关于它的信息,以及一些与之交互的传统程序。在环顾一些程序时,我发现一个包含查询的文件引起了我的注意。在使用Oracle数据库时,我非常擅长使用SQL(我曾在数据仓库中每天8小时查询Oracle),但我没有使用DB2的经验(或者RPG/SQLRPGLE,我认为这是基于我的搜索),这个查询对我来说似乎完全陌生。这里是查询(为了数据安全/匿名的目的而稍作修改):如何将此AS400查询转换为我可以在JDBC连接的DBMS中运行的查询?

SELECT 
    WDATA(CVTDATE(PRDADT,CYMD)) NAME(@PRDADT) COLHDG("Availability Date"), 
    WDATA(prdid.1) NAME(product) COLHDG("Product ID"), 
    prdsku.1 EDTCDE(4), 
    prcxif.2, 
    sum(prcval) NAME(@price) LEN(6,2) 
FROM 
    mydb/prod T01, 
    mydb/pric, 
    mydb/vndr T02, 
PARTIAL OUTER JOIN 
    prdid.1=prcid.2 
    and prdsku.1=prcsku.2 
    and prdid.1=vnid.3 
WHERE 
    prdcbp=&CBP 
    and prdadt BETWEEN yymmdd(date("&&startdt")) AND yymmdd(date("&&enddt")) 
GROUP BY 
    prdsku.1, 
    prcxif.2 
ORDER BY 
    prdsku 

我在这里很难理解一些东西。我已经知道表名中的斜杠是separate schema/table的DB2专用方式,cvtdate表示我们使用名为Sequel Data Access的程序/实用程序,而EDTCDE似乎是format output values的一种方式,但经过几小时的研究,我仍然无法找到某些问题的答案(主要是因为Google在大多数搜索中不会解释符号):

  • 什么是总和字段后的LEN(6,2)?我假设它做了某种填充/舍入(比如最大长度或者6位数的零填充长度,有两位小数),但是任何时候我搜索“len”时,Google都会给我提供其中有“长度”的结果,或者我发现似乎只用一个参数就可以得到字符串长度的函数。
  • 什么是一些列名称上的“#”后缀?它在ORDER BY中没有使用,所以它看起来不像是在字段名称中;它看起来更像是引用该列所属的FROM列表中的哪个表。但是,在使用另一个DB2数据库时,我不必为连接表做任何事情,我只是在它们前面添加表名,例如Oracle ...并且每个列名似乎都使用特定于表的特定前缀我不知道为什么有必要确定表格。
  • 什么是& [文字]和& & [text]对象?我认为& CBP代表一个传递参数,但我不知道它为什么有一个&符号,而& & startdt和& & enddt有两个;也许是一种转义字符,因为那些引号是?
  • WDATA做什么?第二条WDATA行似乎在稍后(在条件中)使用之前对列应用格式,但第一条似乎将名称/标题应用于未返回或稍后使用的列。

我敢肯定,这里的一些聪明的头脑会看看这个查询并知道这意味着什么瞬间,但我完全失去了作为是如何工作的,所以如果有人谁拥有任何我喜欢它,洞察力可以分享它。

谢谢!

回答

1

那么这不是RPG/RPGLE,或者是现在称为IBM i的直接SQL。

续集是现在帮助系统 https://www.helpsystems.com/product-lines/sequel

从我所听到的,这是一个很好的工具所拥有的第三方产品,但语法是特定产品。

我有点受过教育的猜测,在平台上有25年的经验,但对Sequel产品没有经验,这与您的想法是一致的。

  • LEN(6,2) - >调整结果列的大小。 cast (sum(prcval) as numeric(6,2))
  • # - >奇怪的方式别名表
  • & [文],& & [文] - >在参数传递中,& &逃脱,因为双引号的。

WDATA是唯一难倒的......有点谷歌搜索似乎表明,它是用来包括“隐藏”列中不“主”结果屏幕显示。可能用于页面上的标题/过滤器?

+1

您确实帮我解决了这个问题,它告诉我它不是DB2的一部分 - 我以为Sequel Data Access是一个函数包,我没有意识到它是它自己的报告软件。我去看了专门为Sequel数据访问的文档,并在http://static.helpsystems.com/sequel/web-manuals-help/SEQ%2011%20SQL%20Ref%20UG.pdf找到了我所有四个问题的答案。 ?_ga = 2.255803208.1196083854.1499094099-934577074.1499094099。 –

+1

对于任何未来遇到此问题的人,以下是上述PDF中的答案和相关位置: * LEN调整字段大小并修整小数位(页面底部的第53页) * WDATA“working数据“,并允许在Sequel数据访问中修改或使用数据,而无需将其返回结果集中(页面底部52) *”column。#“字段资格类似于”table.column“的别名 - in我使用它的查询实际上并不是必需的,因为列的名称不同(第6页) *变量是&名称或&&名称以转义(页面120,#9) –

相关问题