Обновите Oracle SQL Query, выбрасывая пропущенную правую скобку - PullRequest
3 голосов
/ 20 июля 2011
update mytable set node_index=0 where id in (
        SELECT 
            id
         FROM mytable
         WHERE 
            rownum<=10 and PROCS_DT is null  
         order by CRET_DT,PRTY desc) 

Это ошибка, которую я получаю

Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:

Что не так?Эксперты, пожалуйста, помогите .. Я новичок в Oracle 11g

Ответы [ 3 ]

10 голосов
/ 20 июля 2011
UPDATE  mytable
SET     node_index = 0
WHERE   rowid IN
        (
        SELECT  rid
        FROM    (
                SELECT  rowid AS rid
                FROM    mytable
                WHERE   procs_dt IS NOT NULL
                ORDER BY
                        cret_dt, prty
                )
        WHERE   rownum <= 10
        )
4 голосов
/ 20 июля 2011

В подзапросе не может быть порядка order by, если вы думаете об этом, нет смысла его иметь, поскольку вам не нужно влиять на порядок обновления.Если вы удалите заказ по вашему запросу, он должен сработать, и результат не будет отличаться от того, разрешен ли заказ по.

2 голосов
/ 20 июля 2011

Я считаю, что вам нужно удалить ORDER BY в подзапросе.Порядок строк не имеет смысла для логического результата операции IN.

Обычно, когда Oracle выдает эту ошибку, но у вас сбалансированные круглые скобки, это означает, что в секции в скобках есть неожиданный текст.

Изменить в ответ на комментарий

ROWNUM рассчитывается до применения ORDER BY.Чтобы сделать то, что вы хотите, вам нужен вложенный подзапрос, чтобы вначале происходило упорядочение.

update mytable set node_index=0 where id in (
    SELECT 
        id
     FROM
        ( SELECT id FROM mytable WHERE procs_dt IS NULL order by CRET_DT,PRTY desc)
     WHERE
        rownum<=10
    )

В этом случае ORDER BY разрешено, поскольку оно влияет на результат подзапроса.

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