Oacle 라 이브 러 리 의 표를 외부 텍스트 로 내 보 내 고 구분자 지정

방법 1:spool 로 저장
 
 
   
   
   
   
  1. SQL> spool emp.txt 
  2.  
  3. SQL> select empno||','||ename||','||job||','||mgr||','||sal from emp; 
  4.  
  5.  
  6.  
  7. EMPNO||','||ENAME||','||JOB||','||MGR||','||SAL 
  8.  
  9. ---------------------------------------------------------------------------------------------------- 
  10.  
  11. 7369,SMITH,CLERK,7902,800 
  12.  
  13. 7499,ALLEN,SALESMAN,7698,1600 
  14.  
  15. 7521,WARD,SALESMAN,7698,1250 
  16.  
  17. 7566,JONES,MANAGER,7839,2975 
  18.  
  19. 7654,MARTIN,SALESMAN,7698,1250 
  20.  
  21. 7698,BLAKE,MANAGER,7839,2850 
  22.  
  23. 7782,CLARK,MANAGER,7839,2450 
  24.  
  25. 7788,SCOTT,ANALYST,7566,3000 
  26.  
  27. 7839,KING,PRESIDENT,,5000 
  28.  
  29. 7844,TURNER,SALESMAN,7698,1500 
  30.  
  31. 7876,ADAMS,CLERK,7788,1100 
  32.  
  33. 7900,JAMES,CLERK,7698,950 
  34.  
  35. 7902,FORD,ANALYST,7566,3000 
  36.  
  37. 7934,MILLER,CLERK,7782,1300 
  38.  
  39.  
  40.  
  41. 14 rows selected. 
  42.  
  43.  
  44.  
  45. SQL> spool off; 

간단 한 스 크 립 트 를 작성 하여 지정 한 표를 외부 텍스트 로 내 보 냅 니 다:
 
 
   
   
   
   
  1. #!/bin/bash 
  2.  
  3. ##jxp    
  4.  
  5. ##  
  6.  
  7. tname=$1 
  8.  
  9. sqlplus -S scott/tiger <<EOF 
  10.  
  11. spool tname1.txt 
  12.  
  13. desc $tname 
  14.  
  15. spool off 
  16.  
  17. exit 
  18.  
  19. EOF 
  20.  
  21.  
  22.  
  23. ##  
  24.  
  25. sed -n '3,$p' tname1.txt| awk '{print$1}' |sed '$d' >tname2.txt 
  26.  
  27.  
  28.  
  29. ## abcd.sed '||' tname_1 
  30.  
  31.  
  32.  
  33. tname_1=`sed -f abcd.sed tname2.txt` 
  34.  
  35. #echo $tname_1 
  36.  
  37. ## , sqlplus  
  38.  
  39. new_tname=$tname 
  40.  
  41. sqlplus -S scott/tiger <<EOF 
  42.  
  43. set pagesize 0; 
  44.  
  45. set linesize 300; 
  46.  
  47. set feedback off; 
  48.  
  49. alter session set nls_date_format='YYYY-MM-DD hh24:mi:ss' 
  50.  
  51.  
  52.  
  53. spool $new_tname.txt 
  54.  
  55. select $tname_1  from  $new_tname; 
  56.  
  57. spool off 
  58.  
  59. exit; 
  60.  
  61. EOF 
  62.  
  63. ##  
  64.  
  65. rm -rf tname*.txt 
  66.  

 
수정 해 야 할 것 은 아마도 데이터베이스 에 로그 인 한 사용자 이름 일 것 이다.이 스 크 립 트 에는 abcd.sed 파일 이 사 용 됩 니 다.이 파일 의 내용 과 역할 을 보 여 줍 니 다.
 
   
   
   
   
  1. s/
    /\|\|\'||\'\|\|/g 
  2. s/
    /\|\|\'||\'\|\|/g 
  3. s/
    /\|\|\'||\'\|\|/g 
  4. s/
    /\|\|\'||\'\|\|/g 
  5. s/
    /\|\|\'||\'\|\|/g 
  6. s/
    /\|\|\'||\'\|\|/g 

abcd.sed(abcd 는 마음대로 지은 이름)를 보 여 주 는 간단 한 줄 을 말 합 니 다.내 보 내 는 표 의 필드 가 많 으 면 abcd.sed 의 내용 을 보충 해 야 합 니 다.위 내용 을 복사 하여 붙 여 넣 으 면 Ok 입 니 다.
abcd.sed 의 주요 역할 은 내 보 낼 표 의 필드 를 합 쳐"||"을 한 줄 로 연결 하 는 것 입 니 다.구분자"||"은 다른 기 호 를 지정 하여 대체 할 수 있 습 니 다.
 
스 크 립 트 사용:
exptable.sh 와 abcd.sed 는 한 디 렉 터 리 에 놓 고 sh 스 크 립 트 를 직접 실행 합 니 다.뒤에 사용자 의 표 이름 을 따라 갑 니 다.
   
   
   
   
  1. [oracle@jxpred test_dir]$ nohup ./exp_table.sh dept 
  2.  
  3. [oracle@jxpred test_dir]$ cat dept.txt  
  4.  
  5. 10||ACCOUNTING||NEW YORK 
  6.  
  7. 20||RESEARCH||DALLAS 
  8.  
  9. 30||SALES||CHICAGO 
  10.  
  11. 40||OPERATIONS||BOSTON 

 
 
방법 2:Oacle 의 UTL 사용FILE
conn sys/oracle as sysdba
--매개 변수 파일 초기 화 에 다음 줄 추가
utl_file_dir=d:\bk
   
   
   
   
  1. alter system set utl_file_dir='/home/oracle/exp' scope=spfile

이것 은 데이터 베 이 스 를 다시 시작 해 야 합 니 다.비교적 심각 합 니 다.
 
--그 중 에는 줄 바 꿈
--%s 는 대체 문자 이 며,앞 으로 는 뒤의 1~5 개의 인자 로 대 체 될 것 이 며,기본 값 은 NULL 입 니 다.
--NEW_LINE 프로 세 스 에 새 빈 줄 만 들 기
 
   
   
   
   
  1. ------------------- : DEPT ----------------------------- 
  2. declare 
  3. v_filehandle UTL_FILE.FILE_TYPE; 
  4. begin 
  5. v_filehandle:=utl_file.fopen('/home/oracle/exp','dept.txt','w'); 
  6. UTL_FILE.PUTF (v_filehandle,' DEPT , :%s
    ', SYSDATE); 
  7. UTL_FILE.NEW_LINE (v_filehandle); 
  8. for i in(select * from scott.dept) loop 
  9. UTL_FILE.PUTF (v_filehandle, '%s ,%s, %s
    ',i.deptno,i.dname,i.loc); 
  10. end loop; 
  11. UTL_FILE.FCLOSE (v_filehandle); 
  12. end; 

 
이 방법 은 표 의 필드 를 모두 써 야 합 니 다.
UTL_FILE.PUTF 후:
 
   
   
   
   
  1. UTL_FILE.PUTF (out_file, '%s||%s||%s||%s||%s||',i.TYPEID,i.SYSTEMID,i.SOURCEID,i.SOURCENAME,i.DESTINATIONID); 
  2. UTL_FILE.PUTF (out_file, '%s||%s||%s||%s||%s||',i.DESTINATIONNAME,i.REMARK,i.OPRTR,i.OPRT_TIME,i.SORT_NO); 
  3. UTL_FILE.PUTF (out_file, '%s
    ',i.PARENTID); 

그리고 모든 UTLFILE.PUTF 에는 최대 5 개의%s 대체 문자 만 있 을 수 있 습 니 다.많은 필드 는 줄 을 바 꾸 어 계속 UTL 을 써 야 합 니 다.FILE.PUTF 내용."||"을 구분자 로 사용 합 니 다.다른 구분자 로 바 꿀 수 있 습 니 다.
이상 은 Oacle 에서 자주 사용 하 는 두 가지 내 보 내기 표 에서 텍스트 로 내 보 내 는 방법 입 니 다.
 

좋은 웹페이지 즐겨찾기