【发布时间】:2011-01-04 02:36:46
【问题描述】:
如何从 .bat 文件调用查询? (假设我的查询是:从系统中选择版本)。
我的 .bat 文件可以保存此查询返回的输出吗?我想在我的 NSIS 脚本中使用这个输出。
【问题讨论】:
标签: sql oracle batch-file return-value nsis
如何从 .bat 文件调用查询? (假设我的查询是:从系统中选择版本)。
我的 .bat 文件可以保存此查询返回的输出吗?我想在我的 NSIS 脚本中使用这个输出。
【问题讨论】:
标签: sql oracle batch-file return-value nsis
编辑:此答案适用于 SQL Server,而不是 Oracle。(发布问题时并不清楚)。
您可能需要检查sqlcmd 实用程序。
sqlcmd 实用程序允许您在命令提示符处输入 Transact-SQL 语句、系统过程和脚本文件。以下示例在 sqlcmd 启动时执行查询,然后立即退出。可以执行多个分号分隔的查询:
sqlcmd -d AdventureWorks -Q "SELECT FirstName, LastName FROM Person.Contact WHERE LastName LIKE 'Whi%';"
要将查询的输出保存到文件中,您可以使用-o C:\< filename> 选项。
【讨论】:
如果您有一个命令行 SQL 实用程序,那很可能它允许命令行操作。根据您的 SQL 版本,您可以检查它。
【讨论】:
这取决于您用来执行查询的工具。例如,对于the mysql command line tool,你会这样做:
mysql -u<user> -p<password> -h<host> -Nrs -e"SELECT version() FROM system" > out.txt
这里,mysql -u<user> -p<password> -h<host> 是连接到服务器的标准选项。 -Nrs 是一组选项,它们将导致客户端不输出结果的所有 ascii 艺术。 -e"SELECT version() FROM system" 的位实际上指定了应该执行的命令。有关这些 mysql 特定选项的更多信息,请参阅http://dev.mysql.com/doc/refman/5.1/en/mysql-command-options.html。在您要使用的客户端工具中寻找类似的选项。
最后一点,> out.txt 是标准操作系统级重定向。它将导致来自 mysql 程序的输出存储在文件out.txt 中,但也许您也可以直接重定向到您的 NSIS 程序。
【讨论】:
试试
sqlplus user/pwd@mydb @query.sql > result.txt
其中 query.sql 包含数据库查询,result.txt 将填充查询输出。
根据查询,输出文件可能与您期望的不同(列标题等是典型的 sqlplus),因此您的 query.sql 应包含一些 SET 命令以根据您的需要调整输出。
另一种方法是使用 Oracle SPOOL 命令,而不是将结果通过管道传输到文件。
【讨论】:
对于甲骨文:
How can I issue a single command from the command line through sql plus?
@echo select version from system; | sqlplus username/password@database
您可以将输出通过管道传输到文件并使用该文件,或者将其包装在 for 命令中以解析批处理文件中的输出。
【讨论】:
@echo select version from system; | sqlplus username/password@database > file.ext.