2013-02-20 2 views
1

"CLOB"열이있는 "Long"열과 테이블 Y가있는 테이블 X가 있습니다. 데이터가 표 X에서 표 Y로 마이그레이션되었습니다. 이제 데이터가 올바르게 변환되었는지 확인해야합니다. 캐스팅 사용에 대한 아이디어가 있지만 "Long"값을 select 문에서 "Varchar"로 변환 할 수없는 것 같습니다. 어떤 아이디어든지 높게 평가된다.오라클 : Long 열의 값과 Clob 열의 값을 비교할 수 있습니까

예 : TABLE_X 마이너스 TABLE_Y

답변

0

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 등등.

관련 문제