Генератор SQL бизнес-объектов. Вообще как это работает? Почему он это сделал:

Я создал отчет, который извлек 1 объект из таблицы Purchase_order (PO_REF) и один из таблицы ORG_ZONES (ZONE_NAME).

Зачем BO генерировать запрос, который объединяется с третьей таблицей, ОРГАНИЗАЦИЯ без причины?

Обратите внимание, что таблица ORGANIZATIONS связана как с таблицей PURCHASE_ORDER, так и с таблицей ORG_ZONES, поэтому в некотором смысле, если вы посмотрите на диаграмму отношений таблицы, вы увидите круг ссылок - если это уместно!

Вот результирующий SQL:

SELECT   
  PRELAY.PURCHASE_ORDER.PO_REF,
  PRELAY.ORG_ZONES.ZONE_NAME
FROM
  PRELAY.PURCHASE_ORDER,
  PRELAY.ORG_ZONES,
  PRELAY.ORGANIZATION
WHERE
  ( PRELAY.ORG_ZONES.ORG_ID=PRELAY.ORGANIZATION.ORG_ID  )
  AND  

( PRELAY.PURCHASE_ORDER.SUPPLIER_ORG_ID=PRELAY.ORGANIZATION.ORG_ID(+)
AND PRELAY.ORGANIZATION.ORG_ID >1  )
  AND  ( PRELAY.ORG_ZONES.ZONE_ID=PRELAY.PURCHASE_ORDER.REMITTO_ZONE_ID  

)

Почему генератор BO SQL сгенерировал SQL, включающий таблицу ORGANIZATION, если я не выбираю из этой таблицы, и в противном случае существует прямая связь между двумя таблицами, из которых я получаю данные?

Это пример действительно плохого инструмента генерации SQL? Есть ли способ избежать этого - или только на уровне отдельных отчетов?

1 ответ

Решение

Трудно сказать, не рассматривая вселенную Business Objects напрямую. Вы можете создать отдельную таблицу организационных зон в юниверсе и создать отдельные классы и объекты, которые ссылаются на таблицы. Это позволило бы избежать неправильной генерации SQL, но добавило бы немного большей сложности для конечных пользователей при попытке решить, какую зону использовать в отчете.

Другие вопросы по тегам