2013-05-13 85 views
1

需要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

+2

:你需要爲 – 2013-05-13 12:41:41

+0

Hmmmm兩個不同的更新語句,將是尷尬的,如果我有1279個項目中引用的數字,我更新在一個表中,然後必須在第二個時間完成。我怎麼知道哪一個與哪個有關。希望甲骨文能夠在這裏做一些聰明的事情(費用足夠了,我希望能賺取它的費用:-D) – Casper 2013-05-13 12:43:59

回答

2

恐怕你將不得不建立一個轉換表。例如:

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

然後編寫更新語句,用測試版本代替相關表中的實際版本。

請注意,如果您在這些列上定義了外鍵關係,則需要禁用它們,或者至少使它們可延遲和延遲。這是避免使用有意義的數據作爲主鍵的一個原因。

4

在Oracle中可以對連接進行一般更新。

這是語法: 更新(選擇T1 *從T1,T2哪裏...)集...

他們需要連接列T1和T2,以及獨特的指數之間的連接條件在T2中確保select在T1中每行最多返回一列。 不幸的是你有另一個限制,說只有一個表中的列可以更新(這裏是T1)。

因此,您需要一箇中間表,將project_ref的變更集插入到new-project_ref中,然後使用此表分別更新T1和T2。

+0

優秀的解決方案謝謝 – user206168 2015-09-17 19:02:44