Ошибка выполнения DB2

UPDATE
      S
SET

    (S.a,
    S.b,
    S.c)
=
(

SELECT 
    FS.a,
    FS.b,
    FS.c
FROM

(SELECT 
    T.a,            
    T.b,                
    T.c,                    
    T.d,            
    T.e,                
    CASE 
        WHEN IS.a IS NULL THEN 'N'
        ELSE 'Y'
    END 

FROM 
    t       T
        JOIN
           y
          ON(y.a = T.a)




) FS


WHERE
    FS.a    = S.e
    AND FS.b    = S.a
    AND FS.c    = S.b
    AND FS.d    = S.c
)

Пока я выполняю этот запрос, я получаю сообщение об ошибке:

 21:23:59  [UPDATE - 0 row(s), 0.000 secs]  [Error Code: -811, SQL State: 21000]  DB2 SQL Error: SQLCODE=-811, SQLSTATE=21000, SQLERRMC=null, DRIVER=3.50.152
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec  [0 successful, 0 warnings, 1 errors]

Не могли бы вы объяснить мне основную причину ...?


person Sreejith S T    schedule 14.09.2009    source источник


Ответы (1)


Все сообщения DB2 и их значения можно найти в Интернете.

В вашем случае, согласно записи для SQL0811N:

Одна из следующих причин вызвала ошибку:

  • Execution of an embedded SELECT INTO or VALUES INTO statement resulted in a result table of more than one row.
  • Execution of a scalar fullselect resulted in a result table of more than one row.

Это означает, что ваш оператор выбора, который начинается:

SELECT 
FS.a,
FS.b,
FS.c
FROM ...

возвращает более одной строки. Это не разрешено, так как вы пытаетесь установить значения одной строки в операторе обновления.

person Michael Sharek    schedule 14.09.2009