国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

oracle中sqlplus如何導出數據

2019-11-08 20:49:08
字體:
來源:轉載
供稿:網友
對于SPOOL數據的SQL,最好要自己定義格式,以方便程序直接導入,SQL語句如:

SQL> select owner||'|'||object_name from all_objects where object_type = 'TABLE' and rownum<10; 

OWNER||'|'||OBJECT_NAME

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

SYS|ICOL$

SYS|CON$

SYS|UNDO$

SYS|PROXY_ROLE_DATA$

SYS|FILE$

SYS|UET$

SYS|IND$

SYS|SEG$

SYS|COL$ 

9 rows selected

spool常用的設置

set colsep ' ';    //域輸出分隔符

set echo off;    //顯示start啟動的腳本中的每個sql命令,缺省為on

set feedback off;  //回顯本次sql命令處理的記錄條數,缺省為on

set heading off;   //輸出域標題,缺省為on

set pagesize 0;   //輸出每頁行數,缺省為24,為了避免分頁,可設定為0。

set termout off;   //顯示腳本中的命令的執行結果,缺省為on

set trimout on;   //去除標準輸出每行的拖尾空格,缺省為off

set trimspool on;  //去除重定向(spool)輸出每行的拖尾空格,缺省為off

set verify  on;      //用于校驗環境變量。在設置為ON的時候,如果查詢的sql語句中包含有變量的話,在用戶輸入變量值的時候,會在結果中將發生變化前后的語句輸出來,而如果設置為OFF的話,則不展示這個

 

導出文本數據的建議格式:

SQL*PLUS環境設置

SET NEWPAGE NONE

SET HEADING OFF

SET SPACE 0

SET PAGESIZE 0

SET TRIMOUT ON

SET TRIMSPOOL ON

SET LINESIZE 2500

 

注:LINESIZE要稍微設置大些,免得數據被截斷,它應和相應的TRIMSPOOL結合使用防止導出的文本有太多的尾部空格。但是如果LINESIZE設置太大,會大大降低導出的速度,另外在WINDOWS下導出最好不要用PLSQL導出,速度比較慢,直接用COMMEND下的SQLPLUS命令最小化窗口執行。

 

對于字段內包含很多回車換行符的應該給與過濾,形成比較規矩的文本文件。通常情況下,我們使用SPOOL方法,將數據庫中的表導出為文本文件的時候會采用兩種方法,如下述:

 

方法一:采用以下格式腳本 

set colsep '|' --設置|為列分隔符

  set trimspool on

  set linesize 120

  set pagesize 2000

  set newpage 1

  set heading off

  set term off

set num 18

set feedback off

  spool 路徑 文件名

  select * from tablename;

  spool off

 

方法二:采用以下腳本

set trimspool on

  set linesize 120

  set pagesize 2000

  set newpage 1

  set heading off

  set term off

  spool 路徑 文件名

  select col1||','||col2||','||col3||','||col4||'..' from tablename;

  spool off

 

比較以上方法,即方法一采用設定分隔符然后由sqlplus自己使用設定的分隔符對字段進行分割,方法二將分隔符拼接在SELECT語句中,即手工控制輸出格式。

 

在實踐中,發現通過方法一導出來的數據具有很大的不確定性,這種方法導出來的數據再由sqlldr導入的時候出錯的可能性在95%以上,尤其對大批量的數據表,如100萬條記錄的表更是如此,而且導出的數據文件狂大。

 

而方法二導出的數據文件格式很規整,數據文件的大小可能是方法一的1/4左右。經這種方法導出來的數據文件再由sqlldr導入時,出錯的可能性很小,基本都可以導入成功。

 

 

Eg:

[enrnd@dw_jumpen lpx]$ cat test.sql

select owner||’.’||object_name  from all_objects where rownum<20;

 

#!/bin/sh

 

#get the env

. /home/enrnd/.bash_profile

 

#define the file location

SQL_DIR=/home/enrnd/lpx

 

#spool the result to

sqlplus –s "enrnd/qwsadmtr" <<EOF

set echo off;

set linesize 4000

set long 300

set term off verify off feedback off pagesize 40000 heading on

set markup html on entmap ON spool on preformat off

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

spool $SQL_DIR/test.txt;

@$SQL_DIR/test.sql

 

spool off;

exit;

EOF


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邵阳县| 新巴尔虎右旗| 桃园县| 大同县| 梧州市| 额尔古纳市| 永清县| 宣汉县| 射洪县| 象山县| 格尔木市| 明星| 织金县| 班玛县| 金塔县| 丰城市| 宁阳县| 南靖县| 自治县| 福鼎市| 南溪县| 和平县| 舟曲县| 龙游县| 罗江县| 庄河市| 山东省| 柳河县| 石门县| 丁青县| 三门峡市| 色达县| 武城县| 和政县| 渝中区| 大渡口区| 灵台县| 新化县| 株洲市| 乌拉特前旗| 墨竹工卡县|