我正在编写批处理脚本来连接不同的数据库并为每个数据库执行相同的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
请尽早帮助我。 谢谢。
答案 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"