Oracle更新多个表中的多个列

时间:2013-05-13 12:36:29

标签: oracle

在查询Oracle时需要一些帮助。基本上我想把一个更新一些列的查询放在一起,用测试数据替换实际数据。要做到这一点,我们需要做一些事情,比如在两个表中更改项目代码,但引用必须匹配,所以例如我要做...

UPDATE table1 t1, table2 t2 
SET t1.project_ref = concat('projectRef-',rownum), 
    t2.project_ref = t1.project_ref 
WHERE t1.project_ref = t2.project_ref and t1.project_client = XYZ

这会将t1.project_ref和t2.project_ref更改为类似客户XYZ的'projectRef-1'。

有什么想法吗?

此致

KS

3 个答案:

答案 0 :(得分:4)

通常,Oracle中可以对联接进行更新。

这是语法: 更新(选择T1。*从T1,T2在哪里......)设置...

它们需要T1和T2之间的连接条件,以及T2中连接列的唯一索引,以确保选择在T1中每行返回最多一列。 不幸的是,还有另一个限制,即只能更新其中一个表中的列(此处为T1)。

因此,您需要一个中间表,在其中将project_ref的变更集插入new-project_ref,然后使用此表分别更新T1和T2。

答案 1 :(得分:2)

我担心你将不得不建立一个翻译表。类似的东西:

project_test_data
-----------------
real_project_ref varchar2(30)
test_project_ref varchar2(30)

然后编写更新语句,将测试版本替换为相关表格中的实际版本。

请注意,如果您在这些列上定义了外键关系,则需要禁用它们,或者至少使它们可延迟和延迟。这是避免将有意义的数据用作主键的一个原因。

答案 2 :(得分:0)

http://www.club-oracle.com/threads/updating-two-tables-in-single-query.6026/

此链接有详细解答您的问题请参阅一次:)