오라클에서 고객정보테이블을 만들려는데 고객의 주소가 필요하다고 해보자.
그럴때 우편번호를 써야한다면 일일이 모든 지역의 우편번호 지역이름을 가진 테이블을 만들어 줘야할것이다.
그러나 너무 많기 떄문에 거의 작성이 불가능한다. (실제로 5만행이 넘는다.)
http://www.postman.pe.kr/zipcode/index.html
근데 위의 사이트에가면 한국의 우편번호와 지역명에 대한 모든 내용을 가진 파일을 배포하고 있다.
이것은 내가만든 테이블의 우편번호 컬럼에 넣어주면된다.
1 우편번호를 저장할 테이블을 만들자
테이블의 컬럼명과 위에서 다운받은 우편번호파일의 칼럼명이 일치해야한다.
type이 여러가지 있으므로 자신이 다운받은 파일의 컬럼명과 일치시켜
테이블을 만들어줘야한다.
(우편번호 type은 리,빌딩이름등이 없거나 더 있는등 약간의 차이가 있다.)
CREATE TABLE TBL_ZIP
,SIDO VARCHAR2(500)
,GUGUN VARCHAR2(500)
,DONG VARCHAR2(500)
,RI VARCHAR2(500)
,BLDG VARCHAR2(500)
,BUNJI VARCHAR2(500)
,SEQ NUMBER
); |
BUNJI | SEQ |
참고로 우편번호 테이블을 TBL_ZIP이라 이름지었다.
<아주 사소하지만 편리한 팁>
만일 컬럼명을 우리가 만들 우편번호 테이블에서 그대로 쓴다면 DBF 파일에서 컬럼명들만 복사해서 테이블 만들때 쓰면 타이핑 컬럼명을
일일이 타이핑 하지 않아도 되고 편리하기도 하다.
2. CSV 파일만들기.
우편번호에 대한 파일(확장자가 DBF이다)을 받아서 오피스로 열고. CSV 파일로 저장해준다.
(CSV 파일로되면 쉼표로 구분이되서 나중에 구분자로 쓰면 편리하게 처리할수 있기 떄문이다)
저장경로는 적당한 폴더에 두자. 지금은 C:\postcode\ 에 zipcode.csv 라는 이름으로 두었다.
이떄 이 파일에서 컬럼명에 해당하는 내용은 지워주는것이 좋다. 이 파일의 모든것을 우리가 만들 고객정보와 연계될 우편번호 테이블에
넣어버릴 것이기 떄문에, 우리가 원하는것은 주소와 우편번호에 대한 내역만 남게 하기위해서다.
<우편 번호 DBF 파일>
위에가 우편번호가 저장된 확장자가 DBF인 파일인데. 이것을 제일외에 (현제 드래그된곳)컬럼명에 대한하는
부분을 없애버리고 CSV파일로 저장한다.
<쉼표로 구분이 되게만든 우편번호 CSV파일>
3. 컨트롤파일만들기
CSV 확장자로 된 파일의 모든 내용을 우리가만든 우편번호테이블에 넣을수 없다. 쉼표떄문이다.
이를처리하기위해 컨트롤파일을 메모장들을 이용해 다음과 같은 컨트롤 파일을 만들어준다.
LOAD DATA
INFILE 'C:\postcode\zipcode.CSV'
INSERT INTO TABLE TBL_ZIP
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(ZIPCODE CHAR
,SIDO CHAR
,GUGUN CHAR
,DONG CHAR
,RI CHAR
,BLDG CHAR
,BUNJI CHAR
,SEQ INTEGER EXTERNAL (혹은 char)
)
위에서 INFILE은 CSV가 저장된 곳을 이야기하고
FIElDS TERMINATED BY ','은 구분해주는 쉼표를 없애버리기 위해 써준것이다.
여기서 VARCHAR가 아니라 그냥 CHAR임을 기억하자 그리고 SEQ(시퀀스)의 경우 숫자형이므로 INTEGER 형이라
고 지정해주는것도 주의. 만일 SEQ도 CHAR 으로 해주면 위의 CSV파일에서 제일 마지막에 SEQ는 들어가지 않게 하는 테크닉으로
사용할 수도 있다.
이 파일의 이름을 RE_zipcode.ctl 라고 하고 C:\CTLFILE\ 이라는 곳에 저장해 두었다.
참고> 4 과정인 테이블 삽입을 위에서 위 컨트롤파일에서는 INSERT 써주었는데. 이럴떄는 처음으로 데이터가 들어갈떄
쓰게 되는데. 만일 REPLACE 구문으로 대채해서 써주면 이것은 기존의 테이블을 완전히 삭제한후 새로운 데이터들로
테이블을 채우겠다는 의미이고, 만일 APPEND 라면 기존의 데이터에 추가로 넣어준다는 의미가 된다.
4. 테이블에 직접 삽입
이제 CTL 파일을 이용해서 직접 테이블에 데이터를 넣어보자.
명령프롬프트를 열고 다음과 같이 한다.
SQLLDR userid=아이디/비번 control= C:\CTLFILE\RE_zipcode.ctl LOG= C:\CTLFILE\RE_zipcode.LOG
여기서 LOG 확장자의 파일은 행이 테이블에 들어갈떄의 로그 기록을 보기위한 것이다.
select count(*) from zipcode 확인해보자. 51360행이 입력되였음을 알수 있다.
'오라클 10g' 카테고리의 다른 글
사용자 예외처리 - Pragma Exception_init (0) | 2010.12.16 |
---|---|
오라클에서 우편번호 넣기 (0) | 2010.12.16 |
PL/SQL - IN, OUT paramater (0) | 2010.12.14 |
PL/SQL - CURRENT OF (0) | 2010.12.14 |
PL/SQL - FOR UPDATE (0) | 2010.12.13 |