如何将此 AS400 查询转换为我可以在 JDBC 连接的 DBMS 中 运行 的查询?

How can I convert this AS400 query to one I can run in a JDBC-connected DBMS?

我的办公室里有一台几乎没人知道的旧 AS400,还有一些与之交互的遗留程序。在查看某些程序时,我发现一个包含引起我注意的查询的文件。我擅长 SQL 使用 Oracle 数据库(我在数据仓库工作了几年,每天查询 Oracle 8 小时),但我没有使用 DB2(或 RPG/SQLRPGLE,我认为这是基于我的搜索)并且这个查询对我来说似乎完全陌生。这是查询(为了数据 security/anonymity 目的而略有改动):

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

我无法理解这里的某些内容。我发现 table 名称中的斜杠是 separate schema/table, cvtdate indicates we use a program/utility called Sequel Data Access, and EDTCDE appears to be a way to format output values 的 DB2 特定方式,但经过数小时的研究我仍然找不到某些问题的答案(主要是因为 Google 在大多数搜索中不解释符号):

我相信这里的一些聪明人会看到这个查询并立即知道它的含义,但我完全不知道它是如何工作的,所以如果有人有任何见解,我会很高兴可以分享一下。

谢谢!

好吧,这不是现在称为 IBM i 的 RPG/RPGLE 或直接 SQL。

Sequel 是现在归 Help-systems 所有的第三方产品 https://www.helpsystems.com/product-lines/sequel

据我所知,这是一个不错的工具,但语法因产品而异。

我的一些有根据的猜测,在这个平台上有大约 25 年的经验,但没有使用 Sequel 产品的经验,同意你的想法。

  • LEN(6,2) --> 调整结果列的大小。 cast (sum(prcval) as numeric(6,2))
  • .# --> 别名 table
  • 的奇怪方式
  • &[text], &&[text] --> 传入参数,&&因为双引号转义了。

WDATA 是唯一的难点...谷歌搜索似乎表明它用于包含 "main" 结果屏幕中未显示的 "hidden" 列。可能用在一个header/filter的页面上?