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(),

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