Oacle 라 이브 러 리 의 표를 외부 텍스트 로 내 보 내 고 구분자 지정
- SQL> spool emp.txt
-
- SQL> select empno||','||ename||','||job||','||mgr||','||sal from emp;
-
-
-
- EMPNO||','||ENAME||','||JOB||','||MGR||','||SAL
-
- ----------------------------------------------------------------------------------------------------
-
- 7369,SMITH,CLERK,7902,800
-
- 7499,ALLEN,SALESMAN,7698,1600
-
- 7521,WARD,SALESMAN,7698,1250
-
- 7566,JONES,MANAGER,7839,2975
-
- 7654,MARTIN,SALESMAN,7698,1250
-
- 7698,BLAKE,MANAGER,7839,2850
-
- 7782,CLARK,MANAGER,7839,2450
-
- 7788,SCOTT,ANALYST,7566,3000
-
- 7839,KING,PRESIDENT,,5000
-
- 7844,TURNER,SALESMAN,7698,1500
-
- 7876,ADAMS,CLERK,7788,1100
-
- 7900,JAMES,CLERK,7698,950
-
- 7902,FORD,ANALYST,7566,3000
-
- 7934,MILLER,CLERK,7782,1300
-
-
-
- 14 rows selected.
-
-
-
- SQL> spool off;
간단 한 스 크 립 트 를 작성 하여 지정 한 표를 외부 텍스트 로 내 보 냅 니 다:
- #!/bin/bash
-
- ##jxp
-
- ##
-
- tname=$1
-
- sqlplus -S scott/tiger <<EOF
-
- spool tname1.txt
-
- desc $tname
-
- spool off
-
- exit
-
- EOF
-
-
-
- ##
-
- sed -n '3,$p' tname1.txt| awk '{print$1}' |sed '$d' >tname2.txt
-
-
-
- ## abcd.sed '||' tname_1
-
-
-
- tname_1=`sed -f abcd.sed tname2.txt`
-
- #echo $tname_1
-
- ## , sqlplus
-
- new_tname=$tname
-
- sqlplus -S scott/tiger <<EOF
-
- set pagesize 0;
-
- set linesize 300;
-
- set feedback off;
-
- alter session set nls_date_format='YYYY-MM-DD hh24:mi:ss'
-
-
-
- spool $new_tname.txt
-
- select $tname_1 from $new_tname;
-
- spool off
-
- exit;
-
- EOF
-
- ##
-
- rm -rf tname*.txt
-
- #
수정 해 야 할 것 은 아마도 데이터베이스 에 로그 인 한 사용자 이름 일 것 이다.이 스 크 립 트 에는 abcd.sed 파일 이 사 용 됩 니 다.이 파일 의 내용 과 역할 을 보 여 줍 니 다.
- {
- N
- s/
/\|\|\'||\'\|\|/g
- }
- {
- N
- s/
/\|\|\'||\'\|\|/g
- }
- {
- N
- s/
/\|\|\'||\'\|\|/g
- }
- {
- N
- s/
/\|\|\'||\'\|\|/g
- }
- {
- N
- s/
/\|\|\'||\'\|\|/g
- }
- {
- N
- s/
/\|\|\'||\'\|\|/g
- }
abcd.sed(abcd 는 마음대로 지은 이름)를 보 여 주 는 간단 한 줄 을 말 합 니 다.내 보 내 는 표 의 필드 가 많 으 면 abcd.sed 의 내용 을 보충 해 야 합 니 다.위 내용 을 복사 하여 붙 여 넣 으 면 Ok 입 니 다.
abcd.sed 의 주요 역할 은 내 보 낼 표 의 필드 를 합 쳐"||"을 한 줄 로 연결 하 는 것 입 니 다.구분자"||"은 다른 기 호 를 지정 하여 대체 할 수 있 습 니 다.
스 크 립 트 사용:
exptable.sh 와 abcd.sed 는 한 디 렉 터 리 에 놓 고 sh 스 크 립 트 를 직접 실행 합 니 다.뒤에 사용자 의 표 이름 을 따라 갑 니 다.
- [oracle@jxpred test_dir]$ nohup ./exp_table.sh dept
-
- [oracle@jxpred test_dir]$ cat dept.txt
-
- 10||ACCOUNTING||NEW YORK
-
- 20||RESEARCH||DALLAS
-
- 30||SALES||CHICAGO
-
- 40||OPERATIONS||BOSTON
방법 2:Oacle 의 UTL 사용FILE
conn sys/oracle as sysdba
--매개 변수 파일 초기 화 에 다음 줄 추가
utl_file_dir=d:\bk
- alter system set utl_file_dir='/home/oracle/exp' scope=spfile;
이것 은 데이터 베 이 스 를 다시 시작 해 야 합 니 다.비교적 심각 합 니 다.
--그 중 에는 줄 바 꿈
--%s 는 대체 문자 이 며,앞 으로 는 뒤의 1~5 개의 인자 로 대 체 될 것 이 며,기본 값 은 NULL 입 니 다.
--NEW_LINE 프로 세 스 에 새 빈 줄 만 들 기
- ------------------- : DEPT -----------------------------
- declare
- v_filehandle UTL_FILE.FILE_TYPE;
- begin
- v_filehandle:=utl_file.fopen('/home/oracle/exp','dept.txt','w');
- UTL_FILE.PUTF (v_filehandle,' DEPT , :%s
', SYSDATE);
- UTL_FILE.NEW_LINE (v_filehandle);
- for i in(select * from scott.dept) loop
- UTL_FILE.PUTF (v_filehandle, '%s ,%s, %s
',i.deptno,i.dname,i.loc);
- end loop;
- UTL_FILE.FCLOSE (v_filehandle);
- end;
- /
이 방법 은 표 의 필드 를 모두 써 야 합 니 다.
UTL_FILE.PUTF 후:
- UTL_FILE.PUTF (out_file, '%s||%s||%s||%s||%s||',i.TYPEID,i.SYSTEMID,i.SOURCEID,i.SOURCENAME,i.DESTINATIONID);
- UTL_FILE.PUTF (out_file, '%s||%s||%s||%s||%s||',i.DESTINATIONNAME,i.REMARK,i.OPRTR,i.OPRT_TIME,i.SORT_NO);
- UTL_FILE.PUTF (out_file, '%s
',i.PARENTID);
그리고 모든 UTLFILE.PUTF 에는 최대 5 개의%s 대체 문자 만 있 을 수 있 습 니 다.많은 필드 는 줄 을 바 꾸 어 계속 UTL 을 써 야 합 니 다.FILE.PUTF 내용."||"을 구분자 로 사용 합 니 다.다른 구분자 로 바 꿀 수 있 습 니 다.
이상 은 Oacle 에서 자주 사용 하 는 두 가지 내 보 내기 표 에서 텍스트 로 내 보 내 는 방법 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 작업 은 Clob 또는 NClob 데이터 형식의 저장 프로 세 스 인 스 턴 스 를 포함 합 니 다.텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.