【发布时间】:2017-08-15 07:58:44
【问题描述】:
我有一张表格,需要使用 Excel 电子表格中的一些数据进行更新。我正在考虑以下方面的查询:
WITH temp AS(
(SELECT 'abcd' AS oldvalue, 'defg' AS newvalue FROM dual) UNION
(SELECT .....) --About 300 lines of this, copied from Excel and then formatted into the SELECT statement
)
UPDATE mytable
SET name = (SELECT newvalue FROM temp WHERE mytable.name = temp.oldvalue)
但 Oracle 似乎不喜欢在同一个查询中使用“WITH”和“UPDATE”语句。我收到一条错误消息,提示“缺少 SELECT 关键字”。我发现我可以将临时表定义放在 SELECT 语句中,即
SET name = (SELECT newvalue FROM (
(SELECT 'abcd' AS oldvalue, 'defg' AS newvalue FROM dual) UNION
(SELECT .....)
) temp WHERE mytable.name = temp.oldvalue)
但是,在查询的中间定义一个类似的表是非常非常混乱的代码。我一想到就畏缩。必须有更好的方法来做到这一点。我应该设置一个全局临时表吗?还是我只是错过了一些简单的语法,可以使这项工作以原始方式工作?
【问题讨论】:
-
我认为创建临时表绝对是更好的方法。
标签: sql oracle sql-update common-table-expression