Обновление Oracle: ORA-01427: однострочный подзапрос возвращает более одной строки

Вопрос:UPDATE TMP_COLUMNS SET COLUMNNAME = (SELECT COLUMN_NAME FROM user_tab_columns usertable WHERE table_name = table_Name AND usertable.column_id = TMP_COLUMNS.idcolumn) WHERE EXISTS (SELECT COLUMN_NAME FROM user_tab_columns usertable WHERE table_name = table_Name AND usertable.column_id = TMP_COLUMNS.idcolumn); COMMIT; Я получаю сообщение об ошибке ORA-01427: single-row subquery returns more than one row Лучший ответ: Как отмечает @mnagel, ошибка возникает, потому

Вопрос:UPDATE TMP_COLUMNS SET COLUMNNAME = (SELECT COLUMN_NAME FROM user_tab_columns usertable WHERE table_name = table_Name AND usertable.column_id = TMP_COLUMNS.idcolumn) WHERE EXISTS (SELECT COLUMN_NAME FROM user_tab_columns usertable WHERE table_name = table_Name AND usertable.column_id = TMP_COLUMNS.idcolumn); COMMIT;

Я получаю сообщение об ошибке ORA-01427: single-row subquery returns more than one row

Лучший ответ:

Как отмечает @mnagel, ошибка возникает, потому что ваш подзапрос (SET COLUMNNAME = SELECT…) возвращает более одной строки.

Проблема, вероятно, здесь:

WHERE table_name = table_Name

Вам нужно сделать что-то вроде этого:

WHERE table_name = tmp_columns.something

Если в tmp_columns столбца с именем tmp_columns, вам нужно указать имя таблицы как константу:

WHERE table_name = ‘something’ Ответ №1

вы делаете:

UPDATE TMP_COLUMNS SET COLUMNNAME = ( *SOMETHING* );

где ЧТО-ТО

SELECT COLUMN_NAME FROM user_tab_columns usertable WHERE table_name = table_Name AND usertable.column_id = TMP_COLUMNS.idcolumn

что что-то возвращает более одной строки, поэтому ваше обновление нарушено, так как ему нужно знать новое значение для обновления (и это должно быть ровно одно значение, а не несколько строк).

запустите только что-нибудь и исправьте его, чтобы вернуть правильное значение.

также: не пишите такие длинные строки;)

Оцените статью
Добавить комментарий