Oracle更新:ORA-01427:单行子查询返回多行

时间:2013-07-03 15:08:35

标签: oracle

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

2 个答案:

答案 0 :(得分:4)

你这样做:

UPDATE TMP_COLUMNS SET COLUMNNAME = ( *SOMETHING* );

其中SOMETHING是

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

某些东西会返回多行,因此您的更新会被破坏,因为它需要知道要更新的新值(并且需要只有一个值而不是多行)。

单独运行某个部分并修复它以返回正确的值。

另外:不要写这么长的行;)

答案 1 :(得分:0)

正如@mnagel指出的那样,错误正在发生,因为您的子查询(SET COLUMNNAME = SELECT ...)返回了多行。

问题可能在这里:

WHERE table_name = table_Name

你需要做这样的事情:

WHERE table_name = tmp_columns.something

或者如果tmp_columns中没有表名列,则需要提供表名作为常量:

WHERE table_name = 'something'