1

我有一个简单的 sql 脚本文件,它只包含一个 SELECT 语句。但是 SELECT 语句的输出是巨大的(超过几十万行)。

我无法将输出保存在本地文件中。我刚刚将我的 select 语句更改为 DESC,它工作正常,所以问题似乎是输出的大小(select 语句类似于 SELECT * from TABLEX)

我将不胜感激有关如何执行 select 语句的任何评论。

提前致谢


我更新了我的 sql 脚本文件如下

SET SQLBLANKLINES ON
set echo off  
set feedback off  
set linesize 1000  
set pagesize 0  
set sqlprompt ''  
set trimspool on  
set headsep off  

spool output.csv  
select * from JM_WCEL_BTH_CURRENT  
SPOOL OFF  
EXIT

输出如下

D:\>sqlplus user/user@mydb @2.sql

SQL*Plus: Release 10.2.0.4.0 - Production on Thu Jan 17 10:10:15 2013

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options

  4
  5
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64
bit Production
With the Partitioning, Data Mining and Real Application Testing options

D:\>

输出文件中除了数字 4 和 5 之外什么都没有。几分钟后我按 Ctrl + C 结束了该过程。我还尝试删除假脱机过程,也没有输出到控制台。

我尝试从任何其他工具运行 sql 查询,它在不到一秒的时间内给出结果!

有什么建议么?

谢谢

4

2 回答 2

1

我们已经使用 SQL*Plus 成功地将 6000 万行假脱机到 csv 文件,使用如下:。

set echo off
set feedback off
set linesize 1000
set pagesize 0
set sqlprompt ''
set trimspool on
set headsep off

spool output.csv

select 'col1,col2,col3' from dual;

select col1 || ',' || col2 || ',' || col3
from bigtable;

spool off

长时间运行的查询可能发生的一个问题是 Oracle 会话超时,或者 TCP 连接被防火墙破坏。如果您的查询运行数小时,您可能应该调查这些问题。

于 2013-01-16T07:25:50.633 回答
0

这与性能或 SQL*Plus 限制无关。它只是在执行命令结束时缺少分号:

 select * from JM_WCEL_BTH_CURRENT; 
                                  ^
                                  |____________add semicolon here
于 2014-09-19T15:21:01.997 回答