sqldatabaseoracle-databaseexpressionora-00936

ORA-00936: missing expression oracle


I have this query

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

What is the problem with the allow query that is throwing ORA-00936 missing expression? anyone? Any help will be appreciated...Error thrown at column:80 which is at the beginning of first order by:


Solution

  • Your query can be much simplified. It has things like extra layers of subqueries and an unnecessary order by in an in subquery. What you want to do with rownumber you can do with just 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;