3

まったく同じ構造を持つ 2 つのテーブル Table1 と Table2 があるとします。Table1 から Table2 にデータをコピーしたいと考えています。どちらのテーブルにも、Long Raw データ型のフィールドがあります。次の挿入ステートメントを使用してデータをコピーしています。

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

上記の挿入ステートメントはエラーなしで実行されていますが、Image_Data 列の結果のデータには 0 バイトが含まれています。は、このフィールドに何もコピーされていないことを意味します。Image_Data のデータ型は、両方のテーブルで (Long Raw) です。そのようなデータをあるテーブルから別のテーブルにコピーする正しい方法を誰かが提案できますか?

どうもありがとう

4

4 に答える 4

4

オラクルが LONG と LONG RAW を非推奨にした理由 (過去 1000 年にさかのぼります) は、まさにこの問題のためでした。今こそ、弾丸をかじって、最新の (しかし最先端ではない) BLOB 実装に移行する良い機会かもしれません。これらのテーブルを使用する頻度によって異なります。問題を容認することは、それを主張することであることを忘れないでください。

代替手段は面倒です。LONG をより管理しやすいものに変換するためのさまざまなメカニズムがありますが、他の方法では機能しません。あなたのために働くかもしれない1つのアプローチは次のとおりです。

  1. エクスポートしTable1ます。レガシー テクノロジーが好きなので、Data Pump ではなく EXP を使用することをお勧めします :)
  2. に名前を変更Table1Table2ます。
  3. インポートしTable1ます。
于 2013-04-13T13:36:03.703 に答える
1

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;
于 2013-04-14T13:33:37.777 に答える
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;
/
于 2016-01-22T14:33:14.970 に答える
0

長いまたは長い生の列はもはや使用されるべきではありませんが、多くのレガシー テーブルを処理する必要があります。これをチェックしてください: Long/LongRaw 列を含むテーブルをコピーする

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;
于 2015-10-27T07:49:57.307 に答える