oracle sqlplus spool to multiple files by row number(按行号将Oracle SQLplus假脱机复制到多个文件)
本文介绍了按行号将Oracle SQLplus假脱机复制到多个文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
希望将结果输出到多个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
推荐答案
SQLPlus没有循环的概念,但您可以创建一个接受参数的SQLPlus脚本,这样您就可以拥有一个包含核心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
请注意,当从命令行运行脚本时,SET TERM OFF将阻止数据在屏幕上滚动,并在末尾包含一个出口,这样SQLPlus就不会闲逛,等待更多输入。
使用它,您可以从命令行调用它,如下所示:
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窗口中并行运行它们中的一组,这样一个就不必等待另一个完成。
使用外部循环生成数字并如上所述调用脚本
[免责声明:如果在易失性来源上使用,不能保证生成一致的结果。]
这篇关于按行号将Oracle SQLplus假脱机复制到多个文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:按行号将Oracle SQLplus假脱机复制到多个文件


基础教程推荐
猜你喜欢
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01