2017-07-03 187 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) –

相關問題