database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39148 게시물 읽기
No. 39148
sqlloader infile , INTO TABLE 항목 값을 변수로 받을수 있나요?
작성자
일쌍다반사(jshlove7)
작성일
2011-12-06 11:26
조회수
5,334

안녕하십니까? 고수님들.....

다름이 아니라 이번에 SQLLoader 를 사용하게 되었는데요..

예를 들어.

LOAD DATA
INFILE test20.dat
APPEND
INTO TABLE TB_TEST
FIELDS TERMINATED BY '§'
(YEAR_MON CONSTANT "201111",
  REGION CHAR,
  COUNTRY CHAR,
  PRODUCT CHAR,
  RETAILER CHAR,
  RETAILER_TYPE CHAR,
  CITY CHAR,
  SHOP_ADDR CHAR,
  RECOM_BRAND CHAR
)

위와 같은 컨트롤 파일이 존재한다고 가정하면,

쉘 스크립트에서 INFILE 항목과 INTO TABLE 의 테이블 명을 변수로 받을 수 있을까요??

INFILE 항목은 파일명이 들어갈것이고, INTO TABLE 항목에서는 해당 파일명을 검사해서 파일명에 맞는 테이블

값을 지정해서 넘겨주고....

(설명이 제대로 된건지.....ㅜㅜ)

쉘 스크립트로 SQLLOADER를 실행 할 수 있다는 정보는 찾았는데요..

여러개의 데이타파일을 각각의 테이블로 자동으로 입력하려는 자동화 구현을 하려고 하거든여..

경험해 보신 분들이나..조언해 주실분들의 좋은 정보 부탁드립니다...꾸벅.....

이 글에 대한 댓글이 총 1건 있습니다.

컨트롤 파일을 동적으로 생성하셔야 할듯 한데. 원하시는 답인지는 잘 모르겠네요.

 

#!/bin/ksh

##
##  컨트롤 파일명 및 사용자계정 정보 설정
##
UNAME=scott
PWD=tiger
CTLFNAME=load.ctl

##
##  테이블 및 변수명 입력이 종료될때까지 루프
##
while [ 1 ]
do

    echo "enter table name"
    read tname
    echo "enter infile name"
    read infname

    IFS="
    "

    ##
    ## control file 내용 생성
    ## dba_tab_columns view 조회 권한 필요
    ##

    (
    echo "load data"
    echo "infile ${infname}"
    echo "into table ${tname}"
    echo "append"
    echo "fields terminated by ',' trailing nullcols"
    echo "("

    for col_name in `
        sqlplus -s ${UNAME}/${PWD} <<EOF

            set feed off;
            set head off;
            set termout off;
            set serveroutput on;

            select
                    column_name ||
                    decode( column_id, max(column_id) over( partition by table_name ), '', ',' )

            from
                    dba_tab_columns
            where   1=1
            and     table_name  = upper('${tname}')
            and     owner       = upper('${UNAME}')
            order by
                    column_id;

            exit;
        EOF`
    do
        echo ${col_name}
    done

    echo ")"

    ) > ${CTLFNAME}


    ##
    ##  SQL*Loader 실행
    ##
    sqlldr ${UNAME}/${PWD} ${CTLFNAME}

done

 

으이구님이 2011-12-06 14:29에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39151디비링크된 테이블에 insert/update 는 원래 안되는거 아닌가요? [2]
김태연
2011-12-06
6624
39150마농님께 대놓고 물어보기!! 검색속도 관련입니다. 도와주세요!! [1]
박용선
2011-12-06
4332
39149where 절에 random함수 돌리면 too many value 가 나와요. [5]
최재철
2011-12-06
5529
39148sqlloader infile , INTO TABLE 항목 값을 변수로 받을수 있나요? [1]
일쌍다반사
2011-12-06
5334
39147바인드 변수가 많은 쿼리 실행계획 볼려면.. [2]
궁금이
2011-12-06
4882
39146SQL 한가지만 더 문의 드릴께요. [2]
포대인
2011-12-05
4638
39145alert SID.log에 관한 질문입니다~ [1]
김종인
2011-12-05
4441
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다