2014-02-18 99 views
0

我想將PowerBuilder的東西(包含PBSELECT語句)轉換爲java。 除了PBSELECT語句之外,其他的東西我都很舒服。將PBSELECT轉換爲標準SQL

我想將低於PBSELECT語句轉換爲標準SQL合成器。

PBSELECT(VERSION(400) 
TABLE(NAME="table_barcode") 
TABLE(NAME="table_barcode_attrib_map") 
TABLE(NAME="table_barcode_attribute") 
COLUMN(NAME="table_barcode.label_name") 
COMPUTE(NAME="IsNull(table_barcode_attrib_map.value,0) pacmed_valid")  
JOIN (LEFT="table_barcode.barcode_id" OP ="=" RIGHT="table_barcode_attrib_map.barcode_id" OUTER1 ="table_barcode.barcode_id")  
JOIN (LEFT="table_barcode_attrib_map.attribute_id" OP ="=" RIGHT="table_barcode_attribute.attribute_id" OUTER1 ="table_barcode_attrib_map.attribute_id") 
WHERE( EXP1 ="(~~"table_barcode~~".~~"barcode_id~~"" OP ="=" EXP2 =":as_barcode_id)" LOGIC ="and") 
WHERE( EXP1 ="table_barcode_attribute.attribute_name" OP ="=" EXP2 ="'PACMED VALID FLAG'")) 
ARG(NAME = "as_barcode_id" TYPE = string) 

PBSELECT語句中,我不能夠明白JOIN與外圍一號子句和WHERE第一含~~」的格局。

請幫我轉換PBSELECT標準的SQL。高度讚賞任何幫助。

+0

這是一個DW選擇的圖形味道。你可以讓PB爲你做SQL轉換。你有沒有在設計模式下訪問數據窗口?你需要轉換特定的DW,還是需要能夠轉換任何給定的數據窗口? – Seki

+0

@Seki:我無法在設計模式下訪問powerbuilder數據窗口。我正在尋找任何給定的數據窗口。 – Sanjiv

+0

不確定,但是如果您有.pbl文件,PBL Peeper可能會執行此操作。 – Slapout

回答

1

我已經看到人們爲這種圖形化的SQL編碼編寫轉換例程,但是從我從PowerBuilder工程人員那裏聽到的信息來看,這是無法正確執行的。轉換從數據庫驅動程序和連接派生出一些特定的轉換信息參數,所以在一種情況下工作的轉換例程(例如一個數據庫引擎)可能無法在另一箇中正常工作。

由於Slapout在評論中建議(謝謝!),我的工具PBL Peeper可以提供幫助。您需要應用程序使用的數據庫連接參數(在代碼或INI文件中搜索名爲DBMS的屬性),但在此之後,您可以將SQL轉儲到所有數據窗口(Reports/DataWindow SQL)或在一個時間(瀏覽/人民幣DW對象/對象報告/數據窗口SQL)。這也是更好的瀏覽代碼的方式,特別是如果你沒有PowerBuilder的話。

順便說一句,如果你要轉換,要記住:

  • 數據窗口也可以含蓄地包含插入,更新規範和刪除
  • DataWindow的SQL(和數據窗口的許多其他屬性)可以動態在運行時通過代碼修改
  • 除SQL以外,許多屬性(如X,Y,寬度,高度...)可以是非靜態值,可以從數據庫的值構建的公式派生,時間內存變量(例如PowerScript中的變量)或PowerBuilder可以訪問的任何其他值(一週中的某天,屏幕分辨率等)
  • 許多屬性是相互依賴的(例如, Y和SlideUp)
  • DataWindows可以在運行時從頭開始動態生成,並且該語法可以由代碼生成,也可以從任何源文件或數據庫列中提取(您的PowerBuilder庫(PBL)中的DataWindows列表可能不是完整的圖片)

我已經拿出了比這更大的問題清單,但你明白了。不要低估你的任務。

祝你好運,

特里

0

我會嘗試將其轉換,希望我這樣做是正確

DECLARE @as_barcode_id NVarchar (max) 
-- Since I don't know argument that passed by the program so I set it as max -- 

SELECT table_barcode.label_name, 
     IsNull(table_barcode_attrib_map.value,0) AS pacmed_valid 
    FROM table_barcode LEFT OUTER JOIN table_barcode_attrib_map 
-- Frankly, I still not sure whether it should be LEFT OUTER JOIN OR RIGHT OUTER JOIN -- 
    ON table_barcode.barcode_id = table_barcode_attrib_map.barcode_id 
    LEFT OUTER JOIN table_barcode_attribute 
-- Frankly, I still not sure whether it should be LEFT OUTER JOIN OR RIGHT OUTER JOIN -- 
    ON table_barcode_attrib_map.attribute_id = table_barcode_attribute.attribute_id 
WHERE table_barcode.barcode_id = @as_barcode_id 
    AND table_barcode_attribute.attribute_name = IsNull(table_barcode_attrib_map.value,0)