ORA-01427: однострочный подзапрос возвращает более одной строки с обновлением - PullRequest
0 голосов
/ 27 августа 2018

У меня есть оператор обновления, сначала он работал с некоторыми данными, но через некоторое время у меня возникли проблемы с некоторыми регуляторами, я получил следующую ошибку: ORA-01427: однострочный подзапрос возвращает более одной строки . Я думал, что это IN, потому что запрос может возвращать повторяющиеся идентификаторы, поэтому я поставил DISTINCT, но я продолжал получать ту же ошибку, кто-нибудь имеет какие-либо идеи, что бы это могло быть?

Запрос ниже:

 UPDATE 
        TABLE_DETAIL DET 
    SET 
        DET.ACCEPTED=?,
        DET.VALUE_ACCEPTED=(SELECT RES.VALUE FROM TABLE_RES RES WHERE RES.MYT=DET.MYT AND RES.RAD=DET.RAD AND RES.ITEM=DET.ITEM), 
    WHERE 
        DET.ID 
    IN (
        SELECT 
            DISTINCT DET_I.ID
            FROM TABLE_DETAIL DET_I, TABLE_RES RES_I, TABLE_REC REC 
            WHERE 
                DET_I.MYT = ? 
            AND 
                REC.TEMP 
                NOT IN (
                    SELECT DISTINCT TEMP 
                    FROM 
                    TABLE_IMAGES WHERE CODE=?) 
            AND RES_I.USER = ? 
        )

1 Ответ

0 голосов
/ 27 августа 2018

Вам не нужно SELECT DISTINCT с IN.

Проксимальной причиной вашей проблемы является этот код:

    DET.VALUE_ACCEPTED = (SELECT RES.VALUE FROM TABLE_RES RES WHERE RES.MYT=DET.MYT AND RES.RAD=DET.RAD AND RES.ITEM=DET.ITEM), 

На самом деле невозможно сказать, как это исправить. Код ошибки кажется довольно ясным: по запросу возвращается более одной строки.

Вы можете добавить WHERE rownum = 1, если хотите произвольное значение. Или функция агрегирования в SELECT.

...