Posted
Filed under ORACLE

MYSQL  에서는 auto_increment
MSSQL 에서는 identity(1,1)
 
그럼 ORALCE 에서는 ?
SEQUENCE  라는게 있다.

SEQUENCE를 등록 해 주고
SEQUENCE 를 통해서 다음 증가할 값을 얻어서  테이블에 인자값으로 넣어 주면 된다.
간단히 예를 들어 보면....

CREATE TABLE MEMBER(id number , name varchar2(255));
MEMBER 테이블 생성 후

시퀀스 생성

create sequence SEQ_MEMBER_ID
    increment by 1  -- 1씩 증가
    start with 1        -- 시작값1
    nomaxvalue      -- 최대값 제한이 없다
    nocycle           
    nocache;

SEQ_MEMBER_ID라는 시퀀스가 생성되었다.

MEMBER table에 데이터를 입력 할 때
insert into MEMBER(SEQ_MEMBER_ID.nextval,"이름");
이런식으로 사용 하면 된다.


시퀀스를 삭제 할 경우
drop sequence SEQ_MEMBER_NO[시퀀스명]


기타 시퀀스에 대한 설명

자료참고 : http://www.oracleclub.com/



 

Unique Key를 생성하는 방법은 DBMS마다 차이가 있다.
MS-SQL은 IDENTITY를, MySQL은 auto_increment와 같이 쉽게 사용할 수 있는 방법이 있는데 오라클에서는 Sequence를 사용하여 다음과 같이 유사하게 구현할 수 있다


1. 자동증가컬럼을 사용하고자 하는 MYTABLE테이블을 생성한다.


        CREATE TABLE MYTABLE
                (ID NUMBER, NAME VARCHAR2(20));


2. CREATE SEQUENCE 라는 문장을 사용하여 SEQ_ID라는 이름의 시퀀스를 만든다.


        CREATE SEQUENCE SEQ_ID INCREMENT BY 1 START WITH 10000;

       -- INCREMENT BY 1 : 증가값은 1
       -- START WITH 10000 :  10000부터 증가


3.  테이블에 데이터 입력시에는 NEXTVAL이라는 슈도 칼럼(Pseudo-column)을 이용하여 시퀸스를 사용한다.


        INSERT INTO MYTABLE VALUES( SEQ_ID.NEXTVAL, '홍길동');

       -- CURRVAL : 현재 값을 반환 합니다. .
        -- NEXTVAL : 현재 시퀀스값의 다음 값을 반환 합니다.

----------------------------------------------------------------------------------------------------------


* Sequence 구문


CREATE SEQUENCE sequence_name
        [START WITH n]
        [INCREMENT BY n]
        [MAXVALUE n | NOMAXVALUE]
        [MINVALUE n | NOMINVALUE]
        [CYCLE | NOCYCLE]


* START WITH
시퀀스의 시작 값을 지정합니다. n을 1로 지정하면 1부터 순차적으로 시퀀스번호가 증가 합니다.


* INCREMENT BY
시퀀스의 증가 값을 말합니다. n을 2로 하면 2씩 증가합니다.
START WITH를 1로 하고 INCREMENT BY를 2으로 하면 1, 3, 5,7,..
이렇게 시퀀스  번호가 증가하게 됩니다.


* MAXVALUE n | NOMAXVALUE
MAXVALUE는 시퀀스가 증가할수 있는 최대값을 말합니다.
NOMAXVALUE는 시퀀스의 값을 무한대로 지정합니다.


* MINVALUE n  | NOMINVALUE
MINVALUE는 시퀀스의 최소값을 지정 합니다.
기본값은 1이며, NOMINVALUE를 지정할 경우 최소값은 무한대가 됩니다


[사용규칙]


 
 * NEXTVAL, CURRVAL을 사용할 수 있는 경우
    - subquery가 아닌 select문
    - insert문의 select절
    - insert문의 value절
    - update문의 set절


  * NEXTVAL, CURRVAL을 사용할 수 없는 경우
    - view의 select절
    - distinct 키워드가 있는 select문
    - group by, having, order by절이 있는 select문
    - select, delete, update의 subquery
    - create table, alter table 명령의 default값


[수정과 삭제]


ALTER SEQUENCE sequence_name
        [INCREMENT BY n]
        [MAXVALUE n | NOMAXVALUE]
        [MINVALUE n | NOMINVALUE]
        [CYCLE | NOCYCLE]


START WITH는 수정할수 없습니다.
START WITH 절이 없다는 점을 빼고는 CREATE SEQUENCE와 같습니다.


DROP SEQUENCE sequence_name


 

2010/01/10 13:16 2010/01/10 13:16
Posted
Filed under ORACLE

오라클 (10G) 에서 스크립트 만들에서  sqlldr를 통해서 우편 번호 넣기

먼저 테이블을 생성 한다.

CREATE TABLE ZIPCODE (
 ZIPCODE VARCHAR2(7) NOT NULL,
 SIDO VARCHAR2(50) NOT NULL,
 GUGUN VARCHAR2(50) NOT NULL,
 DONG VARCHAR2(255) NULL,
 BUNJI VARCHAR2(255) NULL,
 SEQ VARCHAR2(6) NULL
)

태이블 생성후 스크립트 파일과 우편번호를 다운 받은 후 스크립트 파일을 수정 하자.

스크립트 파일 과 우편 번호

zipcode.csv

zipcode.csv

zipcode.csv.ctl

zipcode.csv.ctl





zipcode.csv.ctl  내용

LOAD DATA INFILE 'd:\zipcode\zipcode.csv'
REPLACE INTO TABLE zipcode
FIELDS TERMINATED BY ','
TRAILING NULLCOLS(ZIPCODE,SIDO,GUGUN, DONG,BUNJI,SEQ)

여기서LOAD DATA INFILE 경로는 상황에 맞게 설정 해야 한다.


스크립트 파일 설정을 한 후 콘솔에서 sqlldr 을 실행 시키기 위해서

C:\oraclexe\app\oracle\product\10.2.0\server\BIN 이동 (CMD 실행시켜서 이동)
버전에 따라서 설치 경로가 다를 수도 있으니., 윈도우 검색 기를 이용해서
sqlldr.exe를 검색 하면 된다.


[명령어]
sqlldr "아이디/비밀번호"  control="ctrl 팔일 경로"

명령어를 입력하면 다음과 같이 커밋 되고 있는 레코드 개수를 보여 준다 .

사용자 삽입 이미지

2010/01/08 10:01 2010/01/08 10:01