如何使用批处理脚本格式化sql结果

时间:2015-03-31 10:24:50

标签: oracle batch-file

我正在编写批处理脚本来连接不同的数据库并为每个数据库执行相同的SQL脚本。 我希望输出为:

"db_name1","Query_result: "xyz"
"db_name2","Query_result: abc"
"db_name3","Query_result: lmn"

但现在在Query_result - 假脱机后的所有内容,甚至sql查询也会附加到结果中。 我只是想在1st中显示数据库名称,在第二列中显示查询结果。第二列可能有多行或多列来显示结果,即假设Query_result包含多个用户名,则每个名称应位于不同的行中。

这是我的批处理脚本

@ECHO OFF
setlocal enabledelayedexpansion
for /f "delims== tokens=1,2" %%a in (InstallList.txt) do (
echo "DB_NAME : %%a"," 
echo.
echo QUERY_RESULT :
echo.
sqlplus %%b < mysql.sql 
echo "
echo.
) >> result.csv
pause;

在InstallList.txt中

dbname1=username/password
dbname2=username/password
dbname3=username/password

mysql.sql是

WHENEVER SQLERROR EXIT 1
SET LINES 32000
SET TERMOUT OFF ECHO OFF NEWP 0 SPA 0 PAGES 0 FEED OFF HEAD OFF TRIMS ON TAB OFF
SET SERVEROUTPUT ON
spool &1
select user_name from employee where designation= 'manager';
spool off
exit

请尽早帮助我。 谢谢。

2 个答案:

答案 0 :(得分:0)

对sqlplus使用-S选项,以便它不会打印connected to等。

sqlplus -h(帮助模式)显示在-S下:

-S             Sets silent mode which suppresses the display of
               the SQL*Plus banner, prompts, and echoing of
               commands.

所以,你的命令变成了

sqlplus -S %%b < mysql.sql  

而不是

sqlplus %%b < mysql.sql 

答案 1 :(得分:0)

可能SET VERIFY OFF和/或SET FEEDBACK OFF有帮助:

WHENEVER SQLERROR EXIT 1
SET LINES 32000
SET TERMOUT OFF ECHO OFF NEWP 0 SPA 0 PAGES 0 FEED OFF HEAD OFF TRIMS ON TAB OFF
SET SERVEROUTPUT ON
SET FEEDBACK OFF
SET VERIFY OFF
...

查看this site了解更多信息。

p.s。 :根据评论中的问题添加。

@ECHO OFF
setlocal enabledelayedexpansion
for /f "delims== tokens=1,2" %%a in (InstallList.txt) do (
sqlplus %%bb @mysql.sql result.csv %%a
)
pause;

因此,只需循环访问条目并以文件名和数据库名称作为参数启动SQL脚本。

WHENEVER SQLERROR EXIT 1

SET LINES 32000
SET TERMOUT OFF 
SET NEWPAGE 0 
SET PAGESIZE 0 
SET FEEDBACK OFF 
SET HEADING OFF 
SET VERIFY OFF
SET TRIMSPOOL ON

SPOOL &1 APPEND

SELECT '"DB_NAME: &2"' || ',' || '"Query result: ' || user_name || '"'
  FROM employee 
 WHERE designation= 'manager';

SPOOL OFF
EXIT;

使用append添加行,使用第二个参数连接数据库名称。请注意,这段代码未经测试,但基本想法运作良好。

p.p.s。 :例如上面的输出

"DB_NAME: DB1","Query result: Tom Scott"
"DB_NAME: DB2","Query result: Liza Medison"
"DB_NAME: DB3","Query result: Eric Brandon"
"DB_NAME: DB4","Query result: Sam Smith"
"DB_NAME: DB5","Query result: Paula Winter"