从 SQL Server 转换 Oracle 中的更新 SQL
Posted
技术标签:
【中文标题】从 SQL Server 转换 Oracle 中的更新 SQL【英文标题】:Update SQL in Oracle conversion from SQL Server 【发布时间】:2009-07-24 18:43:34 【问题描述】:我正在尝试在 Oracle 中创建更新语句。 这是 SQL Server 中的版本:
UPDATE ev
SET
(ev.station_type = t.st_type, ev.adt = t.adt )
FROM source ev
JOIN dataTbl t
ON ev.counterID = t.counterID
有两张桌子 源表是 counterID 是主键 dataTBL 表是 counterID 是外键 我正在尝试从 dataTBL 获取数据到源表。
如果有人帮助创建更新的 Oracle 版本,我将不胜感激。 谢谢, 更环保
【问题讨论】:
【参考方案1】:你想使用这种技术:
UPDATE ( SELECT ev.station_type
, t.st_type
, ev.adt ev_adt
, t.adt t_adt
FROM source ev
JOIN dataTbl t
ON ev.counterID = t.counterID
)
SET station_type = st_type
, ev_adt = t_adt
;
子查询创建您的结果集,此时您可以使用 SET 子句按您的意愿更新列。
【讨论】:
【参考方案2】:我相信以下语法会起作用(手头没有可供检查的 Oracle):
UPDATE ev
SET (station_type, adt ) = (
SELECT (t.st_type, t.adt)
FROM dataTbl t
WHERE t.counterId = ev.counterId
)
WHERE ev.counterId IN (SELECT t.counterID FROM t);
编辑:WHERE 子句重复看起来很难看,但正如@Steve 指出的那样,需要避免在dataTbl
中没有匹配条目的行中插入空值(如果您有可能使用情况下,当然)。如果您确实需要这样的预防措施,@Steve 的基于联接的解决方案可能更可取。
【讨论】:
如果 source 中存在行而 dataTbl 中没有相应行,您的解决方案将无法正常工作 - 您最终会在 station_type 和 adt 中得到空值。 是的,我确实怀疑需要重复 WHERE 子句(尽管它看起来很傻)——让我相应地进行编辑,tx。以上是关于从 SQL Server 转换 Oracle 中的更新 SQL的主要内容,如果未能解决你的问题,请参考以下文章
将表数据类型从 SQL Server 转换为 Oracle 并将动态 SQL 数据插入到表数据类型
将 SQL Server 存储过程转换为 Oracle 过程以从表中查询
是否可以将数据库从 Approach 转换为 Access、SQL Server 或 Oracle / 其他?