将PBSELECT转换为标准SQL

时间:2014-02-18 07:27:07

标签: java powerbuilder

我正在尝试将PowerBuilder的东西(包含PBSELECT语句)转换为java。 除了其中的PBSELECT声明之外,我对其他东西感到很自在。

我想将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语句中

,我无法理解OUTER1的JOIN子句和第一个包含~~“模式的WHERE。

请帮我转换PBSELECT到标准SQL。任何帮助高度赞赏。

2 个答案:

答案 0 :(得分:1)

我见过人们为这种图形化SQL编码编写转换例程,但是从我从PowerBuilder工程人员那里听到的,这是不可能正确完成的。转换从数据库驱动程序和连接参数中获取有关转换的某些特定信息,因此在一个条件下工作的转换例程(例如,一个数据库引擎)可能无法在另一个条件下正常工作。

正如Slapout在评论中建议的那样(谢谢!),我的工具PBL Peeper可以提供帮助。您将需要应用程序使用的数据库连接参数(在代码或INI文件中搜索名为DBMS的属性),但之后,您可以将SQL转储到所有DataWindows(Reports / DataWindow SQL)或在时间(浏览/ RMB一个DW对象/对象报告/ DataWindow SQL)。这也是浏览代码的更好方法,特别是如果您没有PowerBuilder。

顺便说一下,如果你要转换,请记住:

  • DataWindows也可能隐式包含INSERT,UPDATE和DELETE的规范
  • DataWindow SQL(以及DataWindows的许多其他属性)可以在运行时通过代码动态修改
  • 除了SQL之外,许多属性(如X,Y,Width,Height ...)可以是非静态值,从可以构建在数据库中的值的公式派生而来,来自运行时内存变量(例如变量)在PowerScript中),或PowerBuilder可以访问的任何其他值(星期几,屏幕分辨率等......)
  • 许多属性是相互依赖的(例如Y和SlideUp)
  • DataWindows可以在运行时从头开始动态生成,该语法可以通过代码生成,也可以从任何源(如文件或数据库列)中提取(您的PowerBuilder库(PBL)中的DataWindows列表可能不完整)图片)

我已经提出了比这更大的问题清单,但你明白了。不要低估你的任务。

祝你好运,

特里

答案 1 :(得分: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)