Преобразование PBSELECT в стандартный SQL

Я пытаюсь преобразовать материал 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 я не могу понять предложение JOIN с OUTER1 и первым WHERE, содержащим шаблон ~~".

Пожалуйста, помогите мне преобразовать PBSELECT в стандартный SQL. Любая помощь высоко ценится.


person Sanjiv    schedule 18.02.2014    source источник
comment
Это графическая разновидность DW select. Вы можете попросить PB сделать преобразование в SQL для вас. У вас есть доступ к окну данных в режиме конструктора? Вам нужно преобразовать это конкретное DW или вам нужно иметь возможность преобразовать любое заданное окно данных?   -  person Seki    schedule 18.02.2014
comment
@Seki: у меня нет доступа к окну данных powerbuilder в режиме разработки. Я ищу любой заданный dataWindow.   -  person Sanjiv    schedule 18.02.2014
comment
Не уверен, но если у вас есть файл .pbl, PBL Peeper может это сделать.   -  person Slapout    schedule 18.02.2014
comment
Символ ~ является escape-символом внутри строк PB, и он, по-видимому, используется для экранирования имен таблиц и имен столбцов, которые заключены в двойные кавычки, а двойные кавычки, в свою очередь, необходимо экранировать. Таким образом, синтаксис sql изначально читается как "table_barcode"."barcode_id", но в выражении DW в DW painter это ~"table_barcode~".~"barcode_id~", а в сохраненном синтаксисе DW ~~"table_barcode~~".~~"barcode_id~~"   -  person Seki    schedule 18.02.2014


Ответы (2)


Я видел, как люди пишут процедуры преобразования для этой графической кодировки SQL, но, судя по тому, что я слышал от инженеров PowerBuilder, это невозможно сделать правильно. Преобразование получает определенную информацию о преобразовании из драйвера базы данных и параметров соединения, поэтому процедура преобразования, которая работает в одном состоянии (например, в одном механизме базы данных), может работать некорректно в другом.

Как предлагает Slapout в комментариях (спасибо!), мой инструмент PBL Peeper может помочь. Вам потребуются параметры подключения к базе данных, которые использовало приложение (ищите в коде или INI-файлах атрибуты с именем СУБД), но после этого вы можете сбросить SQL на все DataWindows (Reports / DataWindow SQL) или получить его по одному. время (Обзор / ПКМ по объекту DW / Отчет по объекту / DataWindow SQL). Это также лучший способ просматривать код, особенно если у вас нет PowerBuilder.

Кстати, если вы конвертируете, имейте в виду:

  • DataWindows также может неявно содержать спецификации для INSERT, UPDATE и DELETE.
  • DataWindow SQL (и многие другие атрибуты DataWindows) можно динамически изменять во время выполнения с помощью кода.
  • Помимо SQL, многие атрибуты (например, X, Y, ширина, высота...) могут быть нестатическими значениями, полученными из формул, которые могут быть построены на значениях из базы данных, из переменных памяти времени выполнения (например, переменных в PowerScript) , или любые другие значения, к которым может получить доступ PowerBuilder (день недели, разрешение экрана и т. д.)
  • Многие атрибуты взаимозависимы (например, Y и SlideUp).
  • DataWindows можно генерировать динамически с нуля во время выполнения, и этот синтаксис может быть сгенерирован кодом или извлечен из любого источника, такого как файлы или столбцы базы данных (ваш список DataWindows из библиотек PowerBuilder (PBL) может не быть полной картиной)

Я вытащил более крупные списки проблем, чем этот, но вы поняли идею. Не недооценивайте свою задачу.

Удачи,

Терри

person Terry    schedule 18.02.2014

Попробую переделать, надеюсь правильно

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)
person Lila Swan    schedule 16.10.2015