SQL ошибка запроса REGEXP_INSTR с круглыми скобками в выражении - PullRequest
0 голосов
/ 01 мая 2020

У меня проблема с моим запросом, где у меня есть круглые скобки в регулярном выражении. Мой редактор связывает скобки в выражении с другими скобками вне выражения.

Мне интересно, не вызывает ли это ORA-00907: отсутствует ошибка в правой скобке, которую я получаю, или это что-то еще?

WITH Stats AS
(
    SELECT 
        column1, column2
    FROM TABLE1
    UNION ALL
    SELECT
        column1, column2
    FROM TABLE2
),
Newest AS
(
    SELECT s.*
    ROW_NUMBER() OVER
    (   
        PARTITION BY
        column1, column2
        REPLACE(REPLACE('%(param)s', '5', '6'), '7', '8')
        ORDER BY colum2 DESC
    )   PRIORITY
    CASE WHEN REGEXP_INSTR('%(param)s', '/(//') 
    > 0 AND REGEXP_LIKE(column1, '%(param)s') 
    THEN 'Y' END PARAM_MATCH,
    CASE WHEN REGEXP_INSTR('%(param)s', '/(//') 
    = 0 AND column1 LIKE '%(param)s' THEN 'Y' 
    END LIKE_MATCH,
    FROM Stats s
    WHERE (REGEXP_INSTR('%(param)s', '/(//') > 0 
    AND REGEXP_LIKE(column1,'%(param)s')) OR
    (REGEXP_INSTR('%(param)s', '/(//') = 0 AND 
    REGEXP_LIKE'%(param)s')) OR
    '%(param)s' IS NULL
)

1 Ответ

0 голосов
/ 01 мая 2020

Зиллион ошибок; отмечено в комментариях:

WITH Stats AS
(
    SELECT 
        column1, column2
    FROM TABLE1
    UNION ALL
    SELECT
        column1, column2
    FROM TABLE2
),
Newest AS
(
    SELECT s.*                                      --> missing comma
    ROW_NUMBER() OVER
    (   
        PARTITION BY
        column1, column2                            --> missing comma
        REPLACE(REPLACE('%(param)s', '5', '6'), '7', '8')
        ORDER BY colum2 DESC
    )   PRIORITY                                    --> missing comma
    CASE WHEN REGEXP_INSTR('%(param)s', '/(//') 
    > 0 AND REGEXP_LIKE(column1, '%(param)s') 
    THEN 'Y' END PARAM_MATCH,
    CASE WHEN REGEXP_INSTR('%(param)s', '/(//') 
    = 0 AND column1 LIKE '%(param)s' THEN 'Y' 
    END LIKE_MATCH,                                 --> superfluous comma
    FROM Stats s
    WHERE (REGEXP_INSTR('%(param)s', '/(//') > 0 
    AND REGEXP_LIKE(column1,'%(param)s')) OR
    (REGEXP_INSTR('%(param)s', '/(//') = 0 AND 
    REGEXP_LIKE'%(param)s')) OR                     --> what is REGEXP_LIKE?
    '%(param)s' IS NULL
)
                                                    --> missing SELECT statement

Теперь это правильно, если говорить о синтаксисе. Еще раз, как и в предыдущем вопросе: будьте осторожнее при написании запросов, поскольку это становится абсурдным.

WITH Stats
     AS (SELECT column1, column2 FROM TABLE1
         UNION ALL
         SELECT column1, column2 FROM TABLE2),
     Newest
     AS (SELECT s.*,
                ROW_NUMBER ()
                OVER (
                   PARTITION BY column1,
                                column2,
                                REPLACE (REPLACE ('%(param)s', '5', '6'),
                                         '7',
                                         '8')
                   ORDER BY colum2 DESC)
                   PRIORITY,
                CASE
                   WHEN     REGEXP_INSTR ('%(param)s', '/(//') > 0
                        AND REGEXP_LIKE (column1, '%(param)s')
                   THEN
                      'Y'
                END
                   PARAM_MATCH,
                CASE
                   WHEN     REGEXP_INSTR ('%(param)s', '/(//') = 0
                        AND column1 LIKE '%(param)s'
                   THEN
                      'Y'
                END
                   LIKE_MATCH
           FROM Stats s
          WHERE    (    REGEXP_INSTR ('%(param)s', '/(//') > 0
                    AND REGEXP_LIKE (column1, '%(param)s'))
                OR (    REGEXP_INSTR ('%(param)s', '/(//') = 0
                    AND REGEXP_LIKE ('???', '%(param)s'))
                OR '%(param)s' IS NULL)
SELECT *
  FROM newest;
...