2015-10-05 68 views
0

在某些版本升級期間,Oracle數據庫中的數據遷移有問題。使用SQL在Oracle數據庫中遷移數據

案例:在發佈1

  • 表X有三個coulmns。
  • 與第2版相同的表X有5列(兩個在版本2中添加)。
  • 中釋放3同表有五列中釋放2.
  • 升級路徑包括版本1到版本32版第3版

我需要它拷貝數據從TMP表,實際的表的基礎上,從TMP coulmns大小兩種情況下我暫時存儲的數據(這必須做)一個的Oracle SQL查詢。

下面是我試過的查詢,但它不工作。

insert into USER.X values 
(CASE (select count(*) from all_tab_columns where table_name='TMP') 
WHEN '3' THEN (select USER.TMP.*, null NEWCOL1 from USER.TMP, null NEWCOL2 from USER.TMP) 
WHEN '5' THEN (select USER.TMP.* from USER.TMP) 
END 
); 

請幫忙在這方面,如果有更好的方法做同樣的事請讓我知道。

+0

不工作?通常它有助於發佈確切的錯誤。儘管我可以說這是一個罕見的情況。而不是'值(a,b,c);'使用'從偶數中選擇a,b,c;' –

回答

2

編輯: 你的邏輯有許多問題。

  1. 無法確定在運行時插入語句的參數數量。您必須在創建插入語句之前確定它。
  2. 個案只返回1個值。更重要的是,你會得到錯誤 too many values

所以,你應該

  • 創建存儲過程
  • 使用的if else並創建一個基於 是INSERT語句。
  • 通過Execute immidiate

上一個執行它。響應

第一個問題在您的查詢是select count(*) from all_tab_columns where table_name='TMP'返回一個整數,而在case你比較它與'3''5'爲varchar。因此,假設您的其餘查詢返回結果正確,請嘗試將'3''5'替換爲35

+0

@ Nick.McDermaid:我改變了建議 INSERT INTO USER。x值 ( CASE (SELECT COUNT(*)FROM ALL_TAB_COLUMNS在表格名= 'TMP' ) WHEN 3 THEN (SELECT USER.TMP。*,NULL NEWCOL1,NULL NEWCOL2 FROM USER.TMP ) WHEN 5 THEN (SELECT USER.TMP * FROM USER.TMP 。) END );' 但我得到下面的錯誤: 錯誤在命令行:2列:53 錯誤報告: SQL錯誤:ORA-00947:數值不夠 00947. 00000 - 「值不足」 *原因: *操作: – user2363332

+0

編輯答案以解釋您的查詢出了什麼問題。 – Utsav