преобразование вида из MySQL в ORACLE - PullRequest
0 голосов
/ 06 марта 2020

В настоящее время я пытаюсь обновить программное обеспечение, чтобы иметь возможность подключаться к нескольким базам данных. Пока он поддерживает только MySQL, но я пытаюсь подключить его к Oracle DB.

Пока все преобразования работали очень хорошо. Единственная проблема, с которой я столкнулся, заключалась в том, что я пытался преобразовать скрипт для представления.

Моя преобразованная версия выглядит следующим образом:

SELECT c.company_id AS company_id,
       c.company_name AS company_name,
       c.street || ' ' || c.house_number AS street,
       c.city AS city,
       c.country AS country,
       'DE' AS iso,

  (SELECT count(0)
   FROM proofheader lleph
   WHERE ((lleph.issuer_company_id = c.company_id)
          AND (lleph.customer_company_id = p.customer_company_id))) AS lle,

  (SELECT count(0)
   FROM proofheader ihkph
   WHERE ((ihkph.issuer_company_id = c.company_id)
          AND (ihkph.customer_company_id = p.customer_company_id)
          AND (ihkph.ihk = 1))) AS ihk,

  (SELECT count(0)
   FROM proofheader reminderph
   WHERE ((reminderph.issuer_company_id = c.company_id)
          AND (reminderph.customer_company_id = p.customer_company_id)
          AND (reminderph.status_of_proof IN ('FIRST_REMINDER',
                                              'SECOND_REMINDER',
                                              'THIRD_REMINDER')))) AS reminder,
       0 AS reminderlevel,
       p.customer_company_id AS customer_company_id
FROM (company c
      LEFT JOIN proofheader p on((p.issuer_company_id = c.company_id)))
WHERE (c.issuer = 1)
GROUP BY c.company_id,
         p.customer_company_id
HAVING (count(DISTINCT p.proofheader_id) > 0);

SQL Разработчик выдает ошибку, когда пытаясь запустить его, чтобы оно было «не выражением GROUP BY».

После некоторого исследования я узнал, что Oracle необходимо, чтобы все поля SELECT присутствовали в выражении GROUP BY. SQL Разработчик даже предложил изменить сценарий, после того как выражение GROUP BY выглядит следующим образом:

...
WHERE
  (c.issuer = 1)
GROUP BY
  c.company_id,
  p.customer_company_id,
  c.company_name,
  c.street,
  c.city,
  c.country,
  'DE',
  0
HAVING
  (count(DISTINCT p.proofheader_id) > 0);

Если я запускаю этот сценарий, я все равно получаю ошибку «не выражение GROUP BY».

Насколько я могу судить, мне нужно включить все поля SELECT в группу по. Но если я пытаюсь расширить выражение до следующего:

...
GROUP BY
  c.company_id,
  p.customer_company_id,
  c.company_name,
  c.street,
  c.city,
  c.country,
  'DE',
  0,
  ihk,
  lle,
  reminder
HAVING
  (count(DISTINCT p.proofheader_id) > 0);

Я получаю сообщение об ошибке, что напоминание и lle являются недействительными идентификаторами.

Я что-то упустил?

...