태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

-- 분석 함수

    -- RANK OVER()

    -- ROW_NUMBER() OVER() ** 중요  제일 많은 씀 **

      -- 순위를 구함. 

      -- RANK() OVER()는 동일 순위인 경우 1,1,3, 형식으로 출력하지만

      -- ROW_NUMBER() OVER()는 동일 순위인 경우 1,2,3, 형식으로 출력

      -- DENSE_RANK() OVER()는 동일 순위인 경우 1,1,2 형식으로 출력

      -- ROW_NUMBER() OVER()는 매우매우매우 중요한 함수이므로 반드시 알아 둘것 !!!!!!!!!!!!!!!!!!!!!!!

      

      --기본급 내림차순으로 순위를 구하기

      SELECT name, basicpay, RANK() OVER(ORDER BY basicpay DESC) 순위 FROM insa; -- 비교데이타가 똑같으면 순위를 건너뜀

      

      SELECT name, basicpay, ROW_NUMBER() OVER(ORDER BY basicpay DESC) 순위 FROM insa; -- 비교데이타가 똑같아도 순위를 차례대로 매김

      

      -- 기본급 내림차순으로 순위. 단, 기본급이 같으면 수당 내림차순.

      SELECT name, basicpay, sudang, RANK() OVER(ORDER BY basicpay DESC, sudang DESC) 순위 FROM insa;

      

       SELECT name, basicpay, sudang, ROW_NUMBER() OVER(ORDER BY basicpay DESC, sudang DESC) 순위 FROM insa;

      

      -- 부서별 기본급의 내림차순 순위 구하기

      SELECT name, basicpay, buseo, 

        RANK() OVER(PARTITION BY buseo ORDER BY basicpay DESC, sudang DESC) 순위 

        FROM insa;

      

      SELECT name, basicpay, buseo, 

        ROW_NUMBER() OVER(PARTITION BY buseo ORDER BY basicpay DESC, sudang DESC) 순위 

        FROM insa;

      

      -- 출신도별 부서별 순위(학년의 반별)

      SELECT name, basicpay, city, buseo, 

        RANK() OVER(PARTITION BY city ORDER BY basicpay DESC, sudang DESC) 순위 

        FROM insa;

        

      -- 여자 인원수가 가장 많은 부서는?

      SELECT buseo, COUNT(*) FROM insa

        WHERE SUBSTR(ssn,8,1) IN (2,4,6)

        GROUP BY buseo;

        

      SELECT buseo FROM(

      SELECT buseo, COUNT(*) cnt, RANK() OVER(ORDER BY COUNT(*) DESC) 순위

        FROM insa WHERE SUBSTR(ssn,8,1) IN (2,4,6) GROUP BY buseo

        ) WHERE 순위 =1;

        

      -- 기본급여 많이 받는 1~10등 까지 출력(name, basicpay)

      SELECT name, basicpay,RANK() OVER(ORDER BY basicpay DESC) 순위 FROM(

      SELECT name, basicpay, RANK() OVER(ORDER BY basicpay DESC) 순위 FROM insa 

      ) WHERE 순위 <=10;

      

      -- 기본급 상위 10% 출력(name, basicpay)

       SELECT name, basicpay FROM(

        SELECT name, basicpay, RANK() OVER(ORDER BY basicpay DESC) 순위 FROM insa 

        )WHERE 순위<=TRUNC((SELECT COUNT(*) FROM insa) *0.1);

      

      -- 기본급 하위 10% 출력(

      SELECT name, basicpay FROM(

        SELECT name, basicpay, RANK() OVER(ORDER BY basicpay) 순위 FROM insa 

        )WHERE 순위<=TRUNC((SELECT COUNT(*) FROM insa) *0.1);

      

      -- 부서별 기본급여 가장 높은 사람들 출력( name, buseo, jikwi)

      SELECT name, buseo,basicpay, RANK() OVER(PARTITION BY buseo ORDER BY basicpay DESC) 순위

      FROM insa; -- 일단 부서별 순위를 매기는 쿼리

      

      SELECT name, buseo,basicpay FROM(

        SELECT name, buseo,basicpay,

        RANK() OVER(PARTITION BY buseo ORDER BY basicpay DESC) 순위 

        FROM insa

        ) WHERE 순위=1;

        

    -- ***** 나중에 게시판 작성 할 때 사용하는 쿼리 형식이므로 반드 암기 해야함. *****

    -- ROW_NUMBER()를 이용한 쿼리가 아래 ROWNUM을 사용한 쿼리보다 우수

      SELECT num,name,basicpay FROM(

        SELECT num, name, basicpay, ROW_NUMBER() OVER(ORDER BY num DESC) rnum FROM insa

        ) WHERE rnum>= 10 AND rnum <=15 ORDER BY num DESC;

        

     SELECT num,name,basicpay FROM(

      SELECT ROWNUM rnum, num, name, basicpay FROM(

        SELECT num, name, basicpay FROM insa ORDER BY num DESC

      )

    )WHERE rnum>=10 AND rnum<=15;


출처 : http://tibang.tistory.com/

'프로그래밍 > Oracle' 카테고리의 다른 글

오라클 분석함수  (0) 2016.05.04
oracle hr 사용자 unlock  (0) 2016.01.25
ORACLE PLS-553 오류 처리  (0) 2015.04.29
오라클 백업  (0) 2015.04.24
오라클 테이블 정보 보기  (0) 2015.04.23
SQLPLUS 출력 컬럼 수 조정하기  (0) 2014.07.31
블로그 이미지

구본숭 하늘을사랑한사람

진실된 사람으로 태어 나기 위한 조건들, 사랑하기 위해 필요한 것을 찾습니다.

잠겨있는 계정을 언락 시켜준다.

 

SQL>ALTER USER HR ACCOUNT UNLOCK;

 

계정의 비밀번호 재 설정

 

SQL>ALTER USER HR IDENTIFIED BY a1234; (HR 계정의 비밀번호를 HR로 변경하였습니다.)

'프로그래밍 > Oracle' 카테고리의 다른 글

오라클 분석함수  (0) 2016.05.04
oracle hr 사용자 unlock  (0) 2016.01.25
ORACLE PLS-553 오류 처리  (0) 2015.04.29
오라클 백업  (0) 2015.04.24
오라클 테이블 정보 보기  (0) 2015.04.23
SQLPLUS 출력 컬럼 수 조정하기  (0) 2014.07.31
블로그 이미지

구본숭 하늘을사랑한사람

진실된 사람으로 태어 나기 위한 조건들, 사랑하기 위해 필요한 것을 찾습니다.


 
문제) 오라클 10g : export 실행할때나 토드로 접속할때 아래의 에러발생.
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: character set name is not recognized

조치1) sysdba로 로긴하여 아래 구문 실행

SQL> @ $ORACLE_HOME/javavm/install/rmjvm.sql 
SQL> @ $ORACLE_HOME/rdbms/admin/utlrp.sql
SQL> @ $ORACLE_HOME/rdbms/admin/catalog.sql 
SQL> @ $ORACLE_HOME/rdbms/admin/catproc.sql

==> 문제 해결 안됨.


원인) 아래 쿼리를 날렸을때 데이터 타입이 중복되어서 나옴

쿼리)

select distinct(nls_charset_name(charsetid)) CHARACTERSET,
decode(type#, 1, decode(charsetform, 1, 'VARCHAR2', 2, 'NVARCHAR2','UNKOWN'),
9, decode(charsetform, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'),
96, decode(charsetform, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
112, decode(charsetform, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN
from sys.col$ where charsetform in (1,2) and type# in (1, 9, 96, 112);

결과)

CHARACTERSET  TYPES_USED_IN
----------------- -------------
WE8ISO8859P1      VARCHAR2
KO16KSC5601        VARCHAR2
KO16KSC5601        CHAR
WE8ISO8859P1       CHAR
AL16UTF16            NCLOB
KO16KSC5601        CLOB
AL16UTF16            NVARCHAR2
KO16KSC5601        NVARCHAR2
WE8ISO8859P1       CLOB
AL16UTF16            NCHAR


조치2) sysdba로 아래 구문들 실행

주의사항)

a) Make sure the parallel_server parameter in INIT.ORA is set to false or it is not set at all.
b) Run the next script in SQLPLUS connected "as sysdba"


SQL> sqlplus /nolog 
SQL> conn /as sysdba 
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> COL VALUE NEW_VALUE CHARSET
         SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
SQL> COL VALUE NEW_VALUE NCHARSET
         SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';
SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
-- yes, 2 times startup/shutdown . This is not a typo
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;

실행중 오류발생)

ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE KO16KSC5601
==> ORA-12714: invalid national character set specified

원인)

NATIONAL CHARACTER SET 은 Oracle9i 이후에는 UTF8과 AL16UTF16 만 제공
확인)  

SELECT VALUE 
FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER in ('NLS_NCHAR_CHARACTERSET','NLS_CHARACTERSET')
결과)

PARAMETER                                  VALUE
---------------------------------- ---------------
NLS_CHARACTERSET                     KO16KSC5601

NLS_NCHAR_CHARACTERSET         KO16KSC5601

조치)

update sys.props$ set value$='AL16UTF16' where name='NLS_NCHAR_CHARACTERSET';


이후 위의 조치2)를 다시실행하면 아래와 같은 결과를 얻을수 있다..


문제해결)

CHARACTERSET   TYPES_USED_IN
----------------- -------------
KO16KSC5601        VARCHAR2
KO16KSC5601        CHAR
KO16KSC5601        CLOB
AL16UTF16            NCLOB
AL16UTF16            NVARCHAR2
AL16UTF16            NCHAR



 

Export 할때 아래문장을 자세히 봤으면 조치하는데 시간이 들 걸릴듯 했건만..

조치전) Export done in KO16KSC5601 character set and KO16KSC5601 NCHAR character set

조치후) Export done in KO16KSC5601 character set and AL16UTF16 NCHAR character set

'프로그래밍 > Oracle' 카테고리의 다른 글

오라클 분석함수  (0) 2016.05.04
oracle hr 사용자 unlock  (0) 2016.01.25
ORACLE PLS-553 오류 처리  (0) 2015.04.29
오라클 백업  (0) 2015.04.24
오라클 테이블 정보 보기  (0) 2015.04.23
SQLPLUS 출력 컬럼 수 조정하기  (0) 2014.07.31
블로그 이미지

구본숭 하늘을사랑한사람

진실된 사람으로 태어 나기 위한 조건들, 사랑하기 위해 필요한 것을 찾습니다.

@ A컴퓨터에서 B 컴퓨터로 oracle db 백업



1. A 컴퓨터 db export(백업)


1.1. 오라클 db가 있는 컴퓨터 cmd 창



1.2. export 파일을 다운받을 위치까지 들어간다음 명령어 입력

 

  명령어 : exp dbid/dbpassword@tnsname file=filename.dmp log=filename.log full=y statistics=none

 

** tnsname 확인위치 : http://blog.naver.com/ksy90604/220311841230

 
oracle export(backup) /A컴퓨터에서 db export 할 때 tnsnames.ora 확인 위치
1. 오라클 full backup > 오라클이 설치되어있는 컴퓨터 cmd 창으로 들어간다 > 파일을 다운받을 위치까지 들어간다음 명령어 입력 > exp .....
blog.naver.com
본문으로 이동

2. B 컴퓨터 테이블스페이스 생성(기존에 오라클이 깔려있다면)


2.1. B컴퓨터 cmd 창


2.2. c:... > SQLPLUS SYSTEM/MANAGER


 ** db가 두개일 경우 이러한 방법으로는 들어가지지 않음 

  해결방안 : 1) sqlplus /nolog

 2) conn /@sid as sysdba

2.3. 테이블 스페이스 생성 

    SQL> create tablespace 생성할이름

  2  datafile 'C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\생성할이름.DBF'

  3  SIZE 1000M

  4  AUTOEXTEND ON

  5  EXTENT MANAGEMENT LOCAL AUTOALLOCATE;


3. 사용자 생성

sql > CREATE USER 유저이름  IDENTIFIED BY 유저이름;


4.  사용자 권한 부여

SQL> GRANT DBA TO 유저이름;


5. 사용자 테이블 스페이스 권한 수정

SQL> ALTER USER 유저이름 DEFAULT TABLESPACE 생성된테이블스페이스이름;


6. B 컴퓨터 db import  방법


6.1. B 컴퓨터 cmd창

6.2. import할 파일이 있는 위치까지 들어감

6.3. 명령어 

 imp dbid/dbpassword@tnsname file=operation.dmp log=operation.log fromuser=익스포트받은 유저이름 touser=임포트받을 유저이름 ignore=y

//fromuser는 export한 user touser는 impoert할 유저

'프로그래밍 > Oracle' 카테고리의 다른 글

oracle hr 사용자 unlock  (0) 2016.01.25
ORACLE PLS-553 오류 처리  (0) 2015.04.29
오라클 백업  (0) 2015.04.24
오라클 테이블 정보 보기  (0) 2015.04.23
SQLPLUS 출력 컬럼 수 조정하기  (0) 2014.07.31
프로시저 혹은 함수 목록 출력시  (0) 2014.06.25
블로그 이미지

구본숭 하늘을사랑한사람

진실된 사람으로 태어 나기 위한 조건들, 사랑하기 위해 필요한 것을 찾습니다.

<오라클 테이블 정보 보기>


-- 전체 테이블 정보 보기

select * from all_tables ;

-- 특정 유정의 테이블 정보

select * from all_tables where owner = '유저아이디'

-- 테이블 comments 정보

select * from user_tab_comments

-- 테이블 컬럼 comments 정보

select * from user_col_comments 

-- 컬럼 정보(컬럼 타입, 길이, null 허용 여부 등)

select * from user_tab_columns

-- 해당 유저의 모든 컬럼 제약 사항 보기

select * from user_constraints

-- 해당 유저가 조회 가능한 데이터베이스의 모든 제약 조건 조회

select * from dba_constraint

-- 해당 유저가 조회 가능한 모든 제약 조건 조회

select * from all_constraint

select * from all_tables a1 left join user_tab_columns a2 on a1.table_name=a2.table_name where owner='유저아이디';

'프로그래밍 > Oracle' 카테고리의 다른 글

ORACLE PLS-553 오류 처리  (0) 2015.04.29
오라클 백업  (0) 2015.04.24
오라클 테이블 정보 보기  (0) 2015.04.23
SQLPLUS 출력 컬럼 수 조정하기  (0) 2014.07.31
프로시저 혹은 함수 목록 출력시  (0) 2014.06.25
오라클 날짜 함수  (0) 2014.01.13
블로그 이미지

구본숭 하늘을사랑한사람

진실된 사람으로 태어 나기 위한 조건들, 사랑하기 위해 필요한 것을 찾습니다.

SQLPLUS 출력 컬럼 수 조정하기

 

--조회컬럼의 크기 변경하기
--column 컬럼명 format
--문자열인경우:  a글자수
--숫자인경우 9나 0으로 자릿수표현 : 9999 데이터가 없으면 표현하지 않는다. / 00000 데이터가 없어도 표현
--일시적으로 사용된다. 컬럼명이 같다면 테이블이 달라도 설정한 자릿수로 출력된다.
--column은 줄여서 col만 써도 된다.
--column은 sqlplus에서만 사용할수 있는 sqlplus문장이다.

column name format a6;
col num format 00;
col address format a13;
--포멧으로 설정한 글자가 컬럼의 있는 글자보다 작다면 해당 레코드는 두줄로 표현된다.

'프로그래밍 > Oracle' 카테고리의 다른 글

오라클 백업  (0) 2015.04.24
오라클 테이블 정보 보기  (0) 2015.04.23
SQLPLUS 출력 컬럼 수 조정하기  (0) 2014.07.31
프로시저 혹은 함수 목록 출력시  (0) 2014.06.25
오라클 날짜 함수  (0) 2014.01.13
SQL LOADER 사용 기초  (0) 2013.10.01
블로그 이미지

구본숭 하늘을사랑한사람

진실된 사람으로 태어 나기 위한 조건들, 사랑하기 위해 필요한 것을 찾습니다.

프로시저나 펑션을 만들다 보면 여러 소스코드 파일을 검색하듯이 여러 프로시저나 펑션의 내용을 검색하고자 할 경우가 있습니다.

 

결론부터 말하자면 USER_SOURCE 를 이용하면 됩니다.

 

SELECT NAME 
FROM   USER_SOURCE
WHERE  TYPE = 'PROCEDURE'

GORUP BY NAME  

ORDER BY NAME ASC;

 

 

(TYPE = 'FUNCTION" 으로 하면 펑션에서 검색하게 됩니다.)

 

아래는 USER_SOURCE뷰의 스크립트입니다. (Oracle8i 기준입니다.)

 

CREATE OR REPLACE VIEW USER_SOURCE

(NAME, TYPE, LINE, TEXT)
AS
select o.name,
decode(o.type#, 7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE',
               11, 'PACKAGE BODY', 13, 'TYPE', 14, 'TYPE BODY',
               'UNDEFINED'),
s.line, s.source
from sys.obj$ o, sys.source$ s
where o.obj# = s.obj#
  and o.type# in (7, 8, 9, 11, 13, 14)
  and o.owner# = userenv('SCHEMAID')
union
select o.name, 'JAVA SOURCE', s.joxftlno, s.joxftsrc
from sys.obj$ o, x$joxfs s
where o.obj# = s.joxftobn
  and o.type# = 28
  and o.owner# = userenv('SCHEMAID')
/

 

 

'프로그래밍 > Oracle' 카테고리의 다른 글

오라클 테이블 정보 보기  (0) 2015.04.23
SQLPLUS 출력 컬럼 수 조정하기  (0) 2014.07.31
프로시저 혹은 함수 목록 출력시  (0) 2014.06.25
오라클 날짜 함수  (0) 2014.01.13
SQL LOADER 사용 기초  (0) 2013.10.01
ORA-01476 : 제수가 0 입니다.  (0) 2012.05.14
블로그 이미지

구본숭 하늘을사랑한사람

진실된 사람으로 태어 나기 위한 조건들, 사랑하기 위해 필요한 것을 찾습니다.

SQL 오라클 내장함수(변환형 함수, 날짜 함수, 숫자형 함수)

숫자형 함수

ROUND : 숫자를 반올림

ROUND(숫자값,a) a가 양수이면 소수이하자리를, 음수이면 정수 부분 자리이다.

ROUND(35.735,2) -> 35.74

TRUNC : 숫자를 절사

TRUNC(숫자값,a)

MOD : 나누기 연산에서 나머지 구함

MOD(7,2) -> 1

POWER : 거듭제곱

POWER(3,2) -> 9

SQRT : 제곱근

SQRT(25) -> 5

SIGN : 양수인지 음수인지 0인지를 구별함

SIGN(-15) -> -1

CHR : ASCII값에 해당하는 문자를 구함

CHR(65) -> A

 

날짜형 함수

SYSDATE : 현재 시스템의 날짜 및 시간을 구함

SYSDATE -> 현재 시간 10-MAY-99

LAST_DAY : 지정한 날짜의 해당월의 마지막 날짜를 구함

LAST_DAY('17-FEB-98') -> 28-FEB-98

MONTHS_BETWEEN : 두 날짜사이의 개월수를 구함

MONTHS_BETWEEN('26-APR-97','22-JUL-95') -> 21.1290323

ADD_MONTHS : 지정한 날짜로부터 몇 개월수의 날짜를 구함

ADD_MONTHS('22-JUL-95',21) -> 22-APR-97

ROUND : 날짜에 대한 반올림

ROUND('10-MAY-99','MONTH') -> 01-MAY-99

TRUNC : 날짜에 대한 버림

 TRUNC('10-MAY-99','MONTH') -> 01-MAY-99

변환형 함수

TO_CHAR : 숫자나 날짜를 문자열로 변환

TO_CHAR(350000,'$999,999') -> $350,000

TO_NUMBER : 문자를 숫자로 변환

TO_NUMBER('1234') -> 1234

TO_DATE : 문자를 날짜로 변환

TO_DATE('10 SEPTEMBER 1992','DD MONTH YYYY') -> 10-SEP-92


블로그 이미지

구본숭 하늘을사랑한사람

진실된 사람으로 태어 나기 위한 조건들, 사랑하기 위해 필요한 것을 찾습니다.


SQL*Loader 사용하기

오라클/SQL/SQL공부
 


1. SQL*Loader란 ?
외부 화일에 있는 데이터를 Oracle에 Upload 할 수 있는 유틸리티 입니다.
기본적으로 외부 데이타 화일, 콘트롤화일(로드하는 데이타의 정보를 저장)이 필요합니다.

 

 

2. SQL*Loader 특징
  - 하나 이상의 입력 파일을 사용 가능
  - 로드를 위해 여러 개의 입력 레코드가 하나의 논리적 레코드로 결합될 수 있습니다..
  - 입력 필드는 고정 길이 또는 다양한 길이를 가질 수 있습니다.
  - 입력 데이터는  등   어떤 유형도 가능 합니다.
  - 데이터는 디스크/테이프/명명된 파이프 등 여러 유형의 매체로부터 로드 가능  
  - 데이터가 한 번에 여러 테이블로 로드 가능
  - 텍스트 데이터는 DB 버퍼 캐쉬를 거치지 않고 테이블로 직접 로드될 수 있다.
  - 테이블에 있는 기존 데이터를 대체 하거나(Replace) 추가(Append) 할 수 있는 기능이 있습니다.

 

 

3. SQL*Loader의 사용

 

 


기본문법 :    SQLLDR [keyword=] value  [ [keyword=] value ]...

 

 

     - KEYWORD : 아래에 설명되는 키워드중의 하나이며 VALUE는  키워드에 지정되는  값
  

실행예)

SQLLDR userid=scott/tiger control='test.ctl' log='test.log' 

 

 

 

 


키워드

•USERID :  사용자 ID와 암호
•CONTROL : 콘트롤 파일명
•LOG : 로그 파일명(기본 이름은 컨트롤파일명.log)
•BAD : 업로드에 실패한 레코드들이 저장 된다.(기본 이름은 컨트롤파일명.bad)
•DATA :  업로드를 위한 데이터 파일 이름 
•DISCARD : 선택되지 않은 레코드가 저장되는 디스카드 파일(선택 사항)
•DISCARDMAX :  버림(discard)의 최대 허용 갯수(기본값은 모든 버림을 허용하는 것입니다. 잘못된 입력 파일이 지정될 경우 실행을 중단시킬 안전 수단으로 사용) 
•SKIP : 건너 뛸 레코드 수, 주로 이전에 실패한 로드를 계속할 때 사용됨(한 테이블로 로드할 때나 로드되고 있는 모든 테이블에 대해 동일한 수의 레코드를 건너 뛸 때만 이 옵션을 사용)
•LOAD :  SKIP에 의해 지정된 레코드를 건너 뛴 다음 로드할 레코드 수를 지정 
•ERRORS : 배드 레코드의 최대 수
•ROWS : conventional 로드의 경우 각 삽입 전에 배열에 구축될 행의 수 지정(direct path로드의 경우 이 키워드는 각 data save마다 입력으로부터 읽어들일 행의 근사 수를 정의, Direct로드는 data save 전에 완전한 블록을 구축하고 버릴 행과 부적합한 행을거부한다.)
•BINDSIZE : conventional 로드의 경우 각 데이터베이스 호출시 삽입될 행의 배열을 구축하는데 사용될 최대 바이트 수를 지정(ROWS 파라미터도 지정되면 SQL*Loader는 BINDSIZE의 제한에 따라 ROWS에 의해 정의된 만큼의 행을 구축합니다.)
•DIRECT :  TRUE로 설정되면 SQL*Loader는 direct path를 사용. 반대의 경우는 기본 값인 conventional path 사용.
•PARFILE : 모든 로드 파라미터를 포함하고 있는 파일의 이름을 지정(명령 라인에 정의된 파라미터는  파라미터 파일에 정의된 값들을 무효화합니다.)
•PARALLEL : direct 로드에서만 적합한 이 파라미터는 다중 병렬 direct 로드가 수행되도록 지원
•FILE : 병렬 direct 로드의 경우 임시 세그먼트가 생성될 파일을 지정

 

 

 

 

 

 

 

 

 

 


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

 

 

 

  
   Control File 예(Control File에서 데이터를 포함 할 경우)  
    LOAD DATA
    INFILE *
    REPLACE
    INTO TABLE  mydept  <-- 오라클의 테이블 이름
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    (DEPTNO, DNAME)
    BEGINDATA
    40,SALES
    50,"RESEARCH"

    60,"ART"


 
  

참고 : 
   - Control File에서 데이터를 포함하지 않을 경우에는 INFILE 다음에 DATA파일을 지
        정하고 BEGINDATA 부터 생략 하면 된다.
   - NOLOGGING 키워드를 사용하여 테이블에 NOLOG 속성을 설정하는 것과 콘트롤 
     파일에 UNRECOVERABLE 옵션을 사용하는 것은 서로 같다.

 
6. Data File
  ① 콘트롤 파일에서 정의된 형식의 입력을 위한 데이터가 있다.
  ② UpLoad될 데이터를 Control File에 정의 할 수도 있고 Data File에 따로 분리 할 수도 
      있다.
   
7. Log File
  - 로드 시작/종료 시간, 총로드시간등 정보를 제공 
  - Load상태 정보를 저장
  -로드된 행의 수, 에러로 인해 로드가 거부된 행의 수, 버려진(Discard) 행의 수등의
   정보를 제공 한다.
  

 

출처 : ONJ프로그래밍 (http://www.onjprogramming.co.kr)


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

 

 

 

 

(예제)

1. 연습용 테이블 생성

 


SQL> create table bbangmi_list(

  2  bbang_no           number not null primary key,

  3  food                       varchar2(30) not null,

  4  when                       varchar2(4)

  5  );

 


테이블이 생성되었습니다.

 

 

 

 

 

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

 

 

 

 

 

2. 제어파일 데이터가 들어있는 경우

(C:\Documents and Settings\onj에 저장했다)

 


myfood.ctl파일을 만들었다.


LOAD DATA

INFILE *

INTO TABLE bbangmi_list

FIELDS TERMINATED BY','

(BBANG_NO, FOOD, WHEN)

BEGINDATA

10, 떡볶이, 간식

20, 피자, 저녁

30, 치킨, 점심

40, 맥주, 아침

50, 커피, 아침

 

 

 

3. 실행

 

 

C:\Documents and Settings\onj>sqlldr userid=scott/tiger control = 'myfood.ctl'

 


SQL*Loader: Release 11.2.0.1.0 - Production on 금 8월 2 15:47:22 2013

 


Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 


커밋 시점에 도달 - 논리 레코드 개수 5

 

 

 

 

 

 

4. 데이터 insert 실행여부 확인

(저장폴더에는 이제 myfood.log가 생성되어있다.)

 


SQL> connect scott/tiger

 

 

SQL> select*from bbangmi_list;

 


  BBANG_NO FOOD                           WHEN

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

        10 떡볶이                         간식

        20 피자                           저녁

        30 치킨                           점심

        40 맥주                           아침

        50 커피                           아침

 

 

 

 

 

 

 

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

 


2. 제어파일과 데이터 파일이 분리된 경우
#. control file 부분 : food.ctl저장


#. DATA : food.dat저장

 

 

@ food.ctl 내용


LOAD DATA

INFILE 'food.dat'       

APPEND                

INTO TABLE bbangmi_list

FIELDS TERMINATED BY ','

(bbangmi_no,food,when)

 

 

 

 

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

 

 

 

 

@ food.data 내용


60,금식,안돼

20,초콜렛,간식

10,콜라,저녁

 

 

 

(**주의!! data 파일에 빈칸이 있으면 자료가 안들어가 ㅠㅜㅠㅜㅠㅜㅠㅜ

예: 60, 금식, 안돼 nononono!!!

바른 답 : 60,금식,안돼 goooooooooood!!!

 

 

 

 


3. 실행


C:\Documents and Settings\onj>sqlldr userid=scott/tiger control = 'food.ctl'

 

 

SQL*Loader: Release 11.2.0.1.0 - Production on 금 8월 2 15:57:29 2013

 


Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 


커밋 시점에 도달 - 논리 레코드 개수 2

커밋 시점에 도달 - 논리 레코드 개수 3

 

 

 

 


(dir확인)


2013-08-02  오후 03:57                56 food.bad

2013-08-02  오후 03:55               110 food.ctl

2013-08-02  오후 03:56                54 food.DAT

2013-08-02  오후 03:57             1,972 food.log

2013-08-02  오후 12:08     1,455,095,808 full.dmp

2013-08-01  오전 11:20    <DIR>          My Documents

2013-08-02  오후 02:26               157 mydept.ctl

2013-08-02  오후 02:26             1,537 mydept.log

2013-06-22  오후 03:31       923,430,912 myemp.dmp

2013-08-02  오후 03:46               179 myfood.ctl

2013-08-02  오후 03:47             1,549 myfood.log

2013-06-15  오전 11:22    <DIR>          Oracle

2013-08-02  오전 11:34     1,455,095,808 scott.dmp

2013-06-22  오전 10:32             4,096 scott.emp

2013-07-18  오후 03:01                 0 select

2013-07-18  오후 03:02                 0 spool

2013-08-02  오전 11:44             8,192 structure.dmp

2013-07-18  오후 05:30                 0 test.sql

2013-08-02  오전 10:16    <DIR>          바탕 화면

2011-07-25  오후 03:41    <DIR>          시작 메뉴

              34개 파일       5,289,240,626 바이트

               7개 디렉터리  77,600,690,176 바이트 남음

 

 

 

food.bad 파일이 생성됨 :

----내용----

20,초콜렛,간식


10,콜라,저녁

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

 


(해석) BAD파일이 생긴 이유는 이미 기존에 위의 실습을 통해 10, 20, 30번,40번,50번은 저장 되어 있는 상태.

그러므로 APPEND 되는 10, 20, 60 번중에서 10, 20번을 가진 데이터는 DISCARD 되는 것

(bbang_no 가 Primary Key)

 

 

 

 


4. 데이터 insert 여부 확인


SQL> select * from bbangmi_list;

 


  BBANG_NO FOOD                           WHEN

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

        10 떡볶이                         간식

        20 피자                           저녁

        30 치킨                           점심

        40 맥주                           아침

        50 커피                           아침

        60 금식                           안돼

 


6 개의 행이 선택되었습니다.


 

블로그 이미지

구본숭 하늘을사랑한사람

진실된 사람으로 태어 나기 위한 조건들, 사랑하기 위해 필요한 것을 찾습니다.

분모가 0이되어서 발생하는 문제.
 
당연히 분모가 0이 안되게 하면 되지만, 데이터의 정확성을 위해서는 0도 들어올 수 있어야 하는데
 
그럴때는 아래와 같이 NVL과 DECODE로 해결할 수 있습니다.

 

SELECT NVL(분자 / DECODE(분모, 0, NULL, 분모), 0) FROM 테이블;

블로그 이미지

구본숭 하늘을사랑한사람

진실된 사람으로 태어 나기 위한 조건들, 사랑하기 위해 필요한 것을 찾습니다.