Oracle中用一張表的欄位更新另一張表的欄位

來源:互聯網
上載者:User

標籤:

今天在做項目的過程中,發現開發庫中某張表的某欄位有許多值是空的,而測試庫中該欄位的值則是有的。

那麼,有什麼辦法能將測試庫中該欄位的值更新到開發庫中呢?

 

SQL Server中這是比較容易解決的,而Oracle中就不知道方法了。

SQL Server中類似問題的解決方案

後來只好用最笨的方法:

首先,將資料複製到Excel;(假設稱測試庫的表為A--含有資料)

然後,在開發庫中建立和表A同結構的表B;(這裡為了匯入資料的簡單,我對錶B的結構進行了改造,只有兩個欄位)

圖 表B的資料

再利用PL SQL的匯入功能將這些資料匯入到表B中(此時表B的資料為表A的子集);

接下來要做的是將表B的資料更新到開發庫中相應的表中,假設稱之為表D;

 這裡用到了oracle中的Merge into。

SQL Code如下:

MERGE INTO DUSING BON (D.CATEGORY_NAME = B.CATEGORY_NAME /*AND B IS NULL*/)WHEN MATCHED THEN  UPDATE SET  RELAVANCE_PROPETY = B.RELAVANCE_PROPETY

關於MERGE INTO的詳細講解

但是,在此過程中發生了錯誤:

錯誤1:

在執行MERGE INTO操作的時候,發生了ORA-30926錯誤。

該錯誤的原因是什嗎?如何解決呢?

原因:

  百度了一下,大體知道是因為表B含有重複的Key,這裡的Key就是條件中的CATEGORY_NAME,從條件:

D.CATEGORY_NAME = B.CATEGORY_NAME

可以看出。

補充:

  

解決:

  知道了上面的原因,我們要做的就是把有重複CATEGORY_NAME的記錄刪除。

用下面的SQL獲得哪些CATEGORY_NAME的值重複了:

SELECT CATEGORY_NAME,COUNT(1) FROM BGROUP BY CATEGORY_NAMEHAVING COUNT(1) >1

效果如下:

接下來是重複資料刪除的資料,執行下面語句進入編輯模式:

SELECT * FROM B MMWHERE MM.CATEGORY_NAME IN(SELECT CATEGORY_NAME FROM BGROUP BY CATEGORY_NAMEHAVING COUNT(1) >1) FOR UPDATE

效果如下:

然後選擇需要刪除的資料。

我們這邊的表只有2個欄位,所以可以用group by結果轉存到暫存資料表,再用暫存資料表覆蓋原表的方法洗資料。

但更多的情況是:(1)欄位多於兩個;(2)且某個欄位相同的記錄,別的欄位可能不同(即不完全相同)

 

錯誤2:

在給B表做備份時,想整表複製到新表中,原來經常使用:

select * into new_table from old_table

去做這樣的事情。預期的結果是:在複製表結構的同時,將表中的資料同時複製到new_table中。

結果,出現了下面的錯誤:

為什麼呢?

原因:

  原來select into是PL/SQL的指派陳述式!而這裡的使用格式和賦值的格式是不一致的。

所以,會報ORA-00905錯誤。

解決:

  那麼,PL/SQL中如何解決類似問題的呢?

那就是用create table,語句如下:

--複製表結構和資料CREATE TABLE B1 AS SELECT * FROM B;

AS後接一個查詢語句。

Oracle中用一張表的欄位更新另一張表的欄位

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.