spool命令的使用

(一)SPOOL是sqlplus中的命令

转自:https://blog.csdn.net/wangnan537/article/details/20706555

可作如下用途:


1)可使用SPOOL保存查询的结果集

[sql]  view plain  copy
  1. SPOOL "C:\test.txt" --生成test.txt文件  
  2. ...  
  3. SPOOL OFF --终止,此时这些内容全部被写入文件outputfile中  
2)可使用SPOOL命令生成一些动态的批量处理的脚本,如删除表:
[sql]  view plain  copy
  1. SPOOL "C:\DropAllTables.sql"  
  2.   
  3. SELECT  
  4. 'DROP TABLE ' || OBJECT_NAME || ' CASCADE CONSTRAINTS;'  
  5. FROM USER_OBJECTS WHERE OBJECT_TYPE='TABLE' AND OBJECT_NAME NOT LIKE 'BIN%'  
  6. order by CREATED ASC;  
  7.   

  1. SPOOL OFF  

(二)详细解析SPOOL用法及使用-技术交流

转自:https://blog.csdn.net/zq9017197/article/details/8301674

SPOOL是SQLPLUS的命令

set wrap on;    //当输出的行的长度大于设置的行的长度时(用set linesizen命令设置),当set wrap on时,输出行的多于的字符会另起一行显示,否则,会将输出行的多于字符切除,不予显示。
set colsep ' ';   //域输出分隔符
set echo off;    //显示start启动的脚本中的每个sql命令,缺省为on
set feedback off;  //回显本次sql命令处理的记录条数,缺省为on
set heading off;   //输出域标题,缺省为on
set pagesize 0;   //输出每页行数,缺省为24,为了避免分页,可设定为0。
set termout off;   //显示脚本中的命令的执行结果,缺省为on
set trimout on;   //去除标准输出每行的拖尾空格,缺省为off
set trimspool on;  //去除重定向(spool)输出每行的拖尾空格,缺省为off

SQL*PLUS环境设置SET NEWPAGE NONE  //页和页之间没有任何间隔
                SET HEADING OFF   //不显示每行的列名
                SET SPACE 0       //设置各列间的空格数
                SET PAGESIZE 0    //不分页显示 
                SET TRIMOUT ON 
                SET TRIMSPOOL ON 
                SET LINESIZE 2500 //当输出的行的长度大于设置的行的长度


注:LINESIZE要稍微设置大些,免得数据被截断,它应和相应的TRIMSPOOL结合使用防止导出的文本有太多的尾部空格。

举例说明
1、编写test.sh
#!/bin/sh
user_name=test                               
password=123                        
service_name=test                        

sqlplus -s $user_name/$password@$service_name  //-s 参数屏蔽打印到屏幕上的其他信息
set colsep '    '
set echo off
set trimout on
set trimspool on
set linesize 1000
set pagesize 0
set heading off
set termout off
set feedback off

spool 路径+生成文件名
select id ||'     '||name  ||'     '|from t_user;  //执行的SQL,以tab键分隔
spool off
EOF

然后在后台主机上调用这个shell就可以了!!

2、需要说明的是由于这种方法调用set termout off是不起作用的,所以没执行完一条语句就会在屏幕上滚动显示。
所以需要将以下部分代码编写成一个SQL文件,如:test.sql
set colsep '    '
set echo off
set trimout on
set trimspool on
set linesize 1000
set pagesize 0
set heading off
set termout off
set feedback off

spool 路径+生成文件名
select id ||'     '||name  ||'     '|from t_user;  //执行的SQL,以tab键分隔
spool off
EOF

然后在后台通过
sqlplus -s $user_name/$password@$service_name @test.sql 这种方法去调用就会屏蔽掉屏幕滚动显示了





猜你喜欢

转载自blog.csdn.net/qq_36411874/article/details/80702489