0
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

4

2 回答 2

4

你做:

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

有些东西返回不止一行,所以你的更新被破坏了,因为它需要知道要更新到的新值(并且这需要恰好是一个值而不是多行)。

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

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

于 2013-07-03T15:14:30.183 回答
0

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

问题大概出在这里:

WHERE table_name = table_Name

你需要做这样的事情:

WHERE table_name = tmp_columns.something

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

WHERE table_name = 'something'
于 2013-07-03T15:18:58.587 回答