【发布时间】:2016-12-09 16:31:22
【问题描述】:
希望将结果输出到多个 csv 文件并在每个文件的特定行号处截断。尝试了以下但不想创建多个查询。
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
【问题讨论】:
-
您必须为此使用
SQL*Plus吗?从SQL*Plus创建单个文件然后有一个调用SQL*Plus的批处理脚本然后将文件分解成更小的块似乎要容易得多。或者使用utl_file从循环中生成文件。 -
我正在使用 linux,那个批处理文件会是什么样子?
-
这可能和
split -l <<n>> file_name一样简单,其中<<n>>是您想要的每个文件的行数theunixschool.com/2012/10/…