ORA-00936: отсутствует выражение оракула
У меня есть этот запрос
SELECT DAL_ROWNOTABLE.DAL_ID FROM
(
SELECT ticket.id AS "DAL_ID", ROWNUMBER ( Order By ticket.id ) AS "DAL_ROWNUMBER"
FROM ticket_table ticket
WHERE ( ticket.type = N'I' )
AND
(
ticket.tenant IS NULL OR ticket.tenant IN
(
SELECT * FROM
(
SELECT tenant_group_member.tenant_id
FROM tenant_group_member
WHERE tenant_group_member.tenant_group = HEXTORAW('30B0716FEB5F4E4BB82A7B7AA3A1A42C')
ORDER BY ticket.id
)
)
)
) DAL_ROWNOTABLE
WHERE DAL_ROWNOTABLE.DAL_ROWNUMBER BETWEEN 1 AND 21
В чем проблема с разрешающим запросом, который выбрасывает пропущенное выражение ORA-00936? кто-нибудь? Любая помощь будет оценена... Ошибка в столбце:80, который находится в начале первого порядка:
2 ответа
Решение
Ваш запрос может быть значительно упрощен. Есть такие вещи, как дополнительные слои подзапросов и ненужные order by
в in
подзапрос. Что вы хотите сделать с rownumber
вы можете сделать только с rownum
:
SELECT DAL_ROWNOTABLE.DAL_ID
FROM (SELECT ticket.id AS "DAL_ID"
FROM ticket_table ticket
WHERE (ticket.type = N'I' ) AND
(ticket.tenant IS NULL OR
ticket.tenant IN (SELECT tgm.tenant_id
FROM tenant_group_member tgm
WHERE tgm.tenant_group = HEXTORAW('30B0716FEB5F4E4BB82A7B7AA3A1A42C')
)
)
ORDER BY ticket.id
) DAL_ROWNOTABLE
WHERE rownum <= 21;
ORA-00936 обычно указывает на синтаксическую ошибку.
ROWNUMBER
не является функцией Oracle. Если у вас нет пользовательской функции с таким именем, я подозреваю, что вы ищете ROW_NUMBER()
,