本文介紹了按行號(hào)將Oracle SQLplus假脫機(jī)復(fù)制到多個(gè)文件的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
希望將結(jié)果輸出到多個(gè)CSV文件中,并在每個(gè)文件的特定行號(hào)處截?cái)唷R褔L試以下操作,但不想創(chuàng)建多個(gè)查詢。
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
推薦答案
SQLPlus沒(méi)有循環(huán)的概念,但您可以創(chuàng)建一個(gè)接受參數(shù)的SQLPlus腳本,這樣您就可以擁有一個(gè)包含核心SQL的腳本,比如Extt.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
請(qǐng)注意,當(dāng)從命令行運(yùn)行腳本時(shí),SET TERM OFF將阻止數(shù)據(jù)在屏幕上滾動(dòng),并在末尾包含一個(gè)出口,這樣SQLPlus就不會(huì)閑逛,等待更多輸入。
使用它,您可以從命令行調(diào)用它,如下所示:
sqlplus username/password@database @extract.sql <pagenum>
即:
sqlplus username/password@database @extract.sql 1
sqlplus username/password@database @extract.sql 2
sqlplus username/password@database @extract.sql 3
...
這樣做的好處是,您可以在不同的終端/cmd窗口中并行運(yùn)行它們中的一組,這樣一個(gè)就不必等待另一個(gè)完成。
使用外部循環(huán)生成數(shù)字并如上所述調(diào)用腳本
[免責(zé)聲明:如果在易失性來(lái)源上使用,不能保證生成一致的結(jié)果。]
這篇關(guān)于按行號(hào)將Oracle SQLplus假脫機(jī)復(fù)制到多個(gè)文件的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,