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
答案 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'