728x90

DB는내운명님 | 쿼리 | 2013-06-27 18:39:52


db2를 배우고 있습니다.

CREATE TABLE db2test.G2 (
                  A DECIMAL(20,0) NOT NULL GENERATED BY DEFAULT AS IDENTITY (  
                    START WITH +1  
                    INCREMENT BY +1  
                    MINVALUE +1  
                    MAXVALUE +99999999999999999999  
                    NO CYCLE  
                    CACHE 20  
                    NO ORDER ) , 
                  B VARCHAR(14) , C VARCHAR(10) ) ;   
alter table db2test.g2 alter A set generated always ;
db2 "declare mycurs cursor for select * from db2test.g"
db2 "load from mycurs of cursor modified by identityoverride insert into db2test.g2 NONRECOVERAB
db2 "insert into G2 values ( defalut , '','') ;

 원본/복제 테이블을 생성 후  원본 테이블에 있는 데이터를 복제 테이블로 cursor  load를 했습니다. 그런데 원본 테이블과 복제 테이블의 값이 다르게 나옵니다. 

원본 테이블이 9까지 입력이 된 상태에서 load를 한 후, 복제 테이블에 1~9까지 값이 기록 됬는데, 복제 테이블에 insert를 하니까 다시 1부터 값이 입력이 되는것입니다. 

원본과 복제 테이블의 값이 똑같이 나올려면 어떻게 해야 되나요?




pajama 2013-06-27 21:20:24
로드를 다음과 같이 수행하면 IDENTITY 컬럼값을 생성합니다. 
db2 "load from mycurs of cursor method P(2,3) insert into db2test.g3 (b,c) NONRECOVERABLE"

만약에 원본테이블 값을 그대로 가져온다면 identityoverride 옵션으로 로드한 후에 identity 컬럼 시작값을 변경합니다.
db2 "alter table db2test.g3 alter column a restart with 10"

DB는내운명 2013-06-28 10:41:06
위에 내용 중 method P(2,3)은 어떤 의미 인가요?

pajama 2013-06-28 11:44:34
컬럼 순서를 지정하여 로드하는 방식입니다. 
위의 예는 P(2,3)이면 로드할 데이터의 2번째, 3번째 컬럼을 지정한 컬럼으로 로드합니다.



728x90

+ Recent posts