Ошибка ORA-00920: недопустимый реляционный оператор - PullRequest
1 голос
/ 21 сентября 2019

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

Вот мой запрос:

SELECT aim.student_id,
       coordinator,
       ac_class,
       email_contact,
       doc_date,
       doc_exp_date,
       notes,
       ad.name as "Disability",
       aa.name as "Accommodation",
       PERSON_ID,
       tse.YEAR_TERM,
       ATT_CREDITS,
       PRIMARY_PROGRAM_DESCRIPTION,
       ACADEMIC_YEAR,
       MARITAL_STATUS,
       ENROLLMENT_STATUS_DESCRIPTION,
       CALENDAR_YEAR,
       YEAR_TERM_START_DATE,
       YEAR_TERM_END_DATE,
       CASE
         WHEN (doc_date <= year_term_end_date AND
              doc_exp_date >= year_term_end_date) THEN
          1
         WHEN (isnull(doc_exp_date)) THEN
          1
         ELSE
          0
       END AS "Valid Document"
  FROM striker.saasta_prod.accessibility_aim aim
  JOIN striker.saasta_prod.accessibility_std_disabilities asd
    ON aim.student_id = asd.student_id
  JOIN striker.saasta_prod.accessibility_disabilities ad
    ON asd.disability_id = ad.id
  LEFT JOIN striker.saasta_prod.accessibility_std_accommodations asa
    ON aim.student_id = asa.student_id
  LEFT JOIN striker.saasta_prod.accessibility_accommodations aa
    ON asa.accommodation_id = aa.id
  JOIN dwprd.ods.std_term_status_ext tse
    ON aim.student_id = tse.person_id
  JOIN dwprd.edw.year_term_dim ytd
    ON tse.year_term = ytd.year_term

Ответы [ 3 ]

0 голосов
/ 21 сентября 2019

Потому что вам нужно заменить функцию isnull() на nullif() или nvl(), и второй аргумент, необходимый для них.Поскольку БД Oracle не имеет функции isnull(), в то время как другая БД, такая как SQL Server, имеет.

Все их логики использования аналогичны.

0 голосов
/ 21 сентября 2019

Как отметил Брайан Лич, в способе обращения к таблицам есть проблема: в Oracle вы можете использовать my_schema.my_table, но использование трех разделенных точками частей не поддерживается.

Тамтакже проблема в выражении CASE:

WHEN (isnull(doc_exp_date)) THEN 1

В Oracle нет функции ISNULL().

В SQL Server ISNULL() используется для проверки, является ли первый аргумент NULL, и в этом случае замените его вторым аргументом.Эквивалент Oracle - NVL().

Но поскольку вы используете это выражение в качестве условия, я подозреваю, что вы на самом деле имели в виду:

WHEN doc_exp_date IS NULL THEN 1
0 голосов
/ 21 сентября 2019

Ваши имена таблиц соединения имеют три аргумента, разрешено только два:

INNER JOIN striker.saasta_prod.accessibility_std_disabilities asd

Скопировали ли вы это из SQL Server, где вам разрешено ставить префикс имени базы данных?Это не разрешено в Oracle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...