【问题标题】:Create batch file to run sql创建批处理文件以运行 sql
【发布时间】:2016-02-05 08:54:36
【问题描述】:

我正在尝试创建一个批处理文件来运行一个 sql 查询(然后后台处理结果)。

然而,此刻什么都没有发生,我只是在 cmd 窗口中获得有关 sqlplus 的使用信息。这是我的批处理代码:

SQLPLUS login/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=<url>)(Port=<port>))(CONNECT_DATA=(SID=<sid>)))@C:\Users\Documents\SQL\test2.sql

pause

这是我的 test2.sql 文件:

spool C:\Users\Documents\Testing.csv

select *
from test;

spool off;
exit;

请帮忙 - 我做错了什么? (我对此很陌生,所以请用简单的语言回答/提问/嘲笑,以便我理解)

【问题讨论】:

  • 应该说 - 我正在使用 windows & oracle。
  • 您是否尝试阅读文档以了解 SQLPlus 命令行的正确格式?
  • 我基本上已经阅读了整个互联网 - 因此提出了这个问题。如果我在连接到数据库后将它直接放入命令窗口,则 sql 可以工作。我尝试了各种方法,这(根据其他问题的海报)应该有效 - 但它没有。我想可能是因为数据库是在线托管的?如果很明显我做错了,请告诉我:)
  • 您已经阅读了整个互联网?这很让人佩服。那么你不应该需要我们的帮助。 整个互联网是否包括stackoverflow.com/q/14294068/62576
  • 我开始认为你也不知道答案......(也是 - 是的,我确实读过但没有用)

标签: windows oracle batch-file command-line sqlplus


【解决方案1】:

很明显你做错了。您需要在连接字符串的末尾和带有脚本文件名的@ 之间留一个空格:

SQLPLUS login/password@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=<url>)(Port=<port>))(CONNECT_DATA=(SID=<sid>))) @C:\Users\Documents\SQL\test2.sql

&lt;url&gt; 引用在这里很奇怪;希望这实际上是主机名、完全限定的主机名(可以解析)或 IP 地址。

但是,我建议您使用 TNS 别名,这样您就可以缩短命令行,将所有信息放在 tnsnames.ora 文件中;或者如果您知道服务名称(可能与 SID 相同),请使用简单连接语法:

SQLPLUS -l -s login/password@//<hostname>:<port>/<service_name> @C:\Users\Documents\SQL\test2.sql

我还加入了 -s 标志来抑制横幅,以及 -l 标志以便在凭据或连接字符串错误时停止。您的原始版本会在初始失败后尝试使用脚本内容登录,从而产生更加混乱的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多