1

「Long」列を持つテーブルXと「CLOB」列を持つテーブルYがあります。データはテーブルXからテーブルYに移行されました。次に、データが正しく変換されたかどうかを確認する必要があります。キャストを使用することを考えましたが、selectステートメントで「Long」値を「Varchar」に変換できないようです。どんなアイデアでも大歓迎です。

例えば:

SELECT LONG_COLUMNFROMTABLE_XマイナスSELECTCLOB_COLUMNFROM TABLE_Y

4

1 に答える 1

0

2 つの問題があります:long他のデータ型に簡単に変換/比較clobできず、操作で使用できませんminus!

幸いなことに、PL/SQL を使用することで、これらの両方を克服できます。long と clob はvarchar2、PL/SQL ブロックで選択されたときに暗黙的に変換できます。これらをネストされたテーブルにロードし、multiset except演算子を使用してそれらの違いを見つけることができます。

create table long_t ( x long );
create table lob_t  ( x clob );

insert into long_t values ('1');
insert into long_t values ('2');
insert into lob_t values ('1');

declare
  type t is table of varchar2(32767);
  longs t;
  clobs t;

  diff t;
begin
  select x bulk collect into longs from long_t;
  select x bulk collect into clobs from lob_t;
  diff := longs multiset except clobs;

  for i in 1 .. diff.count loop
    dbms_output.put_line(diff(i));  
  end loop;

  diff := clobs multiset except longs;

  for i in 1 .. diff.count loop
    dbms_output.put_line(diff(i));  
  end loop;
end;
/

anonymous block completed
2

テーブルに数千行を超える行が含まれている場合、テーブル全体が一度にロードされるため、上記をそのまま使用するとメモリ不足になる可能性があります。各テーブルにまたは同様の列がある場合はid、1 ~ 1000、1001 ~ 2000 などの範囲で行をフェッチして比較するのが最善です。

于 2013-02-20T09:29:17.823 に答える