Oracle
更新列中的特定行
我有一列有 82 行(來自 table1),我想用另一個表(table2)中的不同值更新其中的 76 行。避免 6 個特定行(1、10、38、39、46、77)。將這些行保留為空值。
我使用游標從我的 table2 中保存所有 76 行
Cursor my_cur Is Select * from table2
然後我嘗試更新我的 table1
Begin For x in my_cur loop Update table1 Set my_col = x.acct_num Where rnum not in ('1', '10', '38', '39', '46', '77'); end loop; End;
但我最終用相同的值更新了這些行(所有 76 行只有 1 個 acct_num)。似乎我游標的最後一個值(acct_num)是我總是得到的唯一一個。
我想輸入不同的 acct_num 到 76 行,並以與我的 table2 中相同的順序
我在它們兩個中都添加了 rownum 以至少確定要跳過哪些行。任何想法如何做到這一點?謝謝。
您缺少基於可以更新數據的鍵…顯然 table1.my_col 中始終存在最後一個值,因為您正在做的是遍歷所有值並更新 table1 中的列。
數據庫設計不正確..你能分享你的表結構/定義嗎?
然後,我們可以為您提供一些解決方案
編輯:如果您只想將這些記錄從一個表移動到另一個表…
嘗試這個:
insert into t1 (my_col) as select acct_num from t2 where rownum not in ('1', '10','38', '39', '46', '77');
假設您有一個與 t1 和 t2 中的行相關聯的 rownum 列,您可以使用合併語句(未經測試,因為我們不知道表的結構):
MERGE INTO T1 as x USING ( SELECT * FROM T2 ) as y ON x.rownum = y.rownum WHEN MATCHED AND x.rownum NOT IN ('1', '10', '38', '39', '46', '77') THEN UPDATE SET x.my_col = y.acct_num;