2013-04-13 68 views
2

考慮我有兩個表Table1和Table2具有完全相同的結構。我想將Table1中的數據複製到Table2。兩個表都有一個Long Raw數據類型的字段。我正在使用下面的插入語句來複制數據。Oracle:將Long Raw數據從一個表複製到另一個表

INSERT INTO TABLE2 
SELECT ID, NAME, TO_LOB(IMAGE_DATA) FROM TABLE1 

上面的insert語句執行時沒有錯誤,但Image_Data列中的結果數據中有0個字節;意味着沒有複製這個領域。 Image_Data的數據類型在兩個表中都是(Long Raw)。有人可以建議將這些數據從一個表格複製到另一個表格的正確方法。

非常感謝

+1

'LONG RAW'已經depricated了近十年。是否有一個原因,你不使用'BLOB'而是?至少從8.1.5開始,這是首選的方法。 –

+0

這就是我們擁有的遺留系統。我不想進入,但如果沒有其他選擇,我會試一試。任何關於Long_Raw的建議? – Farhan

+0

使用導出和導入實用程序和/或編寫C/VB/Java應用程序的缺點,我不知道有什麼方法可以用'LONG RAW'來完成。如果您使用的是「BLOB」,則可以像其他任何數據類型一樣複製數據。 –

回答

4

爲什麼甲骨文棄用LONG和LONG RAW的原因 - 早在上個世紀 - 正是因爲這個問題:他們是一個完整的疼痛內式頸部。現在可能是咬下子彈並轉向現代(但不是最尖端的)BLOB實現的好時機。這取決於你使用這些表的頻率。請記住,to tolerate a problem is to insist on it

替代品很麻煩。有多種機制可以將LONG轉換成更易於管理的東西,但它們不會以其他方式工作。一種可能適用於您的方法是:

  1. 導出Table1。因爲您喜歡傳統技術,您需要使用EXP而不是數據泵:)
  2. 將名稱Table1更改爲Table2
  3. 導入Table1
0

使用PL/SQL

declare 
    l long; 
begin 
    select long_column into l from some_table where pk = 1; 
    insert into some_other_table values (l); 
    commit; 
end; 
0

雖然long或long raw列不應再使用,有很多傳統的表來處理。檢查了這一點: Copy Tables with Long/LongRaw columns

declare 
    l_rec_long_table long_table%rowtype; 
begin 
    select * 
    into l_rec_long_table 
    from long_table a 
    where a.long_id = 'some old id'; 


    insert into long_table 
    values 
    ('new id', 
    l_rec_long_table.long_column); 
end; 
0
SET DEFINE OFF; 
DECLARE 
    fldLong VARCHAR2(10000); 
    idTable MYSCHEMA.MYTABLE.ID_MYTABLE%TYPE; 
BEGIN 
    FOR r IN (SELECT LONGFIELD_MYTABLE, ID_MYTABLE FROM MYSCHEMA.MYTABLE) LOOP 
     fldLong := r.LONGFIELD_MYTABLE; 
     idTable := r.ID_MYTABLE; 
     DBMS_OUTPUT.PUT_LINE('Value field long: ' || fldLong); 

     Insert into MYSCHEMA.MY_ANOTHER_TABLE 
     (
      ANOTHERFIELD1 [, ANOTHERFIELD2 ...], LONGFIELD_MY_ANOTHER_TABLE 
     ) 
     SELECT FIELD1[, FIELD2 ...], fldLong 
     FROM MYSCHEMA.MYTABLE 
     WHERE ID_MYTABLE = idTable; 
    END LOOP; 
END; 
/
相關問題