2016-08-03 74 views
0

希望將結果輸出到多個csv文件並在每個文件的特定行號處截斷。嘗試以下,但不想創建多個查詢。oracle sqlplus通過行號將文件轉換爲多個文件

set colsep , 
DEFINE SPOOL_BASE_NAME = "spool" 
DEFINE PAGE_SIZE = 10 
DEFINE PAGE_NO = 1 
DEFINE SPOOL_EXT=".csv" 
SPOOL &SPOOL_BASE_NAME.&PAGE_NO.&SPOOL_EXT 

SELECT * 
     FROM (SELECT a.*,rownum rnum 
FROM (SELECT username, account_status,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE FROM dba_users order by username) a 
      WHERE rownum <= &PAGE_SIZE * &PAGE_NO) 
     WHERE rnum >= &PAGE_SIZE * (&PAGE_NO - 1) + 1; 
SPOOL OFF 

DEFINE PAGE_NO = 2 
SPOOL &SPOOL_BASE_NAME.&PAGE_NO 
SELECT * 
     FROM (SELECT a.*,rownum rnum 
FROM (SELECT username, account_status,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE FROM dba_users order by username) a 
      WHERE rownum <= &PAGE_SIZE * &PAGE_NO) 
     WHERE rnum >= &PAGE_SIZE * (&PAGE_NO - 1) + 1; 
SPOOL OFF 
+2

你有使用' SQL * Plus「呢?從'SQL * Plus'創建單個文件似乎容易得多,然後有一個調用「SQL * Plus」的批處理腳本,然後將文件分解爲更小的塊。或者使用'utl_file'從循環內生成文件。 –

+0

即時通訊使用Linux,該批處理文件是什麼樣子? – Dom

+0

它可能就像'split -l <> file_name'一樣簡單,其中'<>'是每個文件所需的行數http://www.theunixschool.com/2012/10/10-examples-of-split -command功能於unix.html –

回答

0

的SQLPlus沒有循環的概念,但你可以創建一個接受參數的SQLPlus腳本,所以你可以有與核心SQL腳本,說extract.sql,看起來像以下:

DEFINE SPOOL_BASE_NAME = "spool" 
DEFINE PAGE_SIZE = 10 
DEFINE PAGE_NO = &1 
DEFINE SPOOL_EXT=".csv" 
SPOOL &SPOOL_BASE_NAME.&PAGE_NO.&SPOOL_EXT 
SET TERM OFF 

SELECT * 
     FROM (SELECT a.*,rownum rnum 
FROM (SELECT username, account_status,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE FROM dba_users order by username) a 
      WHERE rownum <= &PAGE_SIZE * &PAGE_NO) 
     WHERE rnum >= &PAGE_SIZE * (&PAGE_NO - 1) + 1; 
SPOOL OFF 
EXIT 

注意,在命令行中運行腳本時,一組項OFF將防止在屏幕上滾動的數據,並在結尾的退出使的SQLPlus好好嘗試一下流連等待更多的輸入。

有了這個,你可以在命令行稱其爲:

sqlplus username/[email protected] @extract.sql <pagenum> 

即:

sqlplus username/[email protected] @extract.sql 1 
sqlplus username/[email protected] @extract.sql 2 
sqlplus username/[email protected] @extract.sql 3 
... 

這樣做的好處是,你可以在不同的並行運行一羣人終端/ CMD窗口,所以沒有等待另一個完成。

隨着外部環路生成的數量和調用腳本如上,

[免責聲明:不能保證,如果對揮發性源使用,這將產生一致的結果]

相關問題