首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按行号将oracle sqlplus spool复制到多个文件

按行号将oracle sqlplus spool复制到多个文件
EN

Stack Overflow用户
提问于 2016-08-04 03:39:23
回答 1查看 2.8K关注 0票数 0

希望将结果输出到多个csv文件中,并在每个文件的特定行号处截断。已尝试以下操作,但不想创建多个查询。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2016-08-04 08:48:03

SQLPlus没有循环的概念,但是您可以创建一个接受参数的SQLPlus脚本,这样您就可以拥有一个包含核心extract.sql的脚本,如下所示:

代码语言:javascript
复制
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

请注意,当从命令行运行脚本时,SET TERM OFF将阻止数据在屏幕上滚动,并在末尾包含一个出口,这样SQLPlus就不会等待更多输入。

使用此命令,您可以从命令行调用它,如下所示:

代码语言:javascript
复制
sqlplus username/password@database @extract.sql <pagenum>

这就是:

代码语言:javascript
复制
sqlplus username/password@database @extract.sql 1
sqlplus username/password@database @extract.sql 2
sqlplus username/password@database @extract.sql 3
...

这样做的好处是,您可以在不同的终端/cmd窗口中并行运行它们,这样一个窗口就不必等待另一个窗口完成。

利用外部循环来生成数字并调用如上所述的脚本,

免责声明:如果在易失性源上使用,不能保证生成一致的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38752289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档