FROM SELECT CLOB_COLUMN FROM
SELECT LONG_COLUMN 당신은 두 가지 문제가 있습니다 long
쉽게 다른 데이터 유형과 clob
는 사용할 수 없습니다 비교/변환 할 수 없습니다 a minus
작업!
다행히도 PL/SQL을 사용하면이 두 가지 문제를 모두 극복 할 수 있습니다. long과 clob은 PL/SQL 블록에서 선택 될 때 암시 적으로 varchar2
으로 변환 될 수 있습니다. 당신은 중첩 된 테이블에 다음을로드 할 수 있습니다 다음, 그들 사이의 차이점을 찾기 위해 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 등등.