【问题标题】:SP2-0310: unable to open file .sqlSP2-0310:无法打开文件 .sql
【发布时间】:2013-12-20 22:20:40
【问题描述】:

我从我的 java 程序调用批处理文件,结果执行一些 .sql 文件。 批处理脚本如下:

set part1= CREATE OR REPLACE DIRECTORY REPORT AS '
set total=%part1%%4';
echo %total% > DIR_REPORT.sql
echo exit; >>DIR_REPORT.sql
sqlplus %1/%2@%3 @./DIR_REPORT.sql
sqlplus %1/%2@%3 @./PACKAGE_SCRIPTv2.sql

我的java代码是:

Runtime run = Runtime.getRuntime();
System.out.println("Start Running the batch file");
Process p = run.exec(new String[]{"cmd.exe","/c", "start", "C:/Users/sony/Documents/NetBeansProjects/CodeReview/src/codereview/install.bat",i,j,m,l});
System.out.println("Completed");

报错:

SP2-0310: unable to open file

使用批处理生成的第一个文件 (DIR_REPORT) 正在执行,但我的 PACKAGE_SCRIPTv2.sql 没有被执行但出现错误,请帮我做什么。

虽然从 cmd 手动运行批处理文件时一切正常...

【问题讨论】:

  • 您是否有权访问该文件?
  • 是的,我有,但是我如何检查呢?
  • 如果您在 Windows 上右键单击文件,然后单击属性。
  • 我拥有所有权限,我已验证...

标签: java oracle


【解决方案1】:

第一个脚本是在当前工作目录中创建和执行的,所以它会一直存在(假设你有权限在那里创建)。第二个预计也将在当前工作目录中。那么问题来了,当前的工作目录是什么?

看起来您希望它是C:/Users/sony/Documents/NetBeansProjects/CodeReview/src/codereview/,如果您在那里手动运行.bat,它可以正常工作(根据您所说的);因此,当您从 Java 调用它时,它必须在其他地方。这可能是你的 JVM 启动时的工作目录,或者是你的主目录,我认为 - 不太确定。

您需要指定正确的目录,或者硬编码到脚本中,或者作为另一个参数传递。然后,您可能希望在脚本中将 cd 设置为 DIR_REPORT.sql,以便在相同的已知位置创建;否则你可以使用它创建PACKAGE_SCRIPTv2.sql的完整路径。

【讨论】:

    【解决方案2】:

    是的,问题是在语句中定义的路径包含所有文件,但是在执行时脚本只会持续到:

    “C:/Users/sony/Documents/NetBeansProjects/CodeReview”

    这是在cmd中显示的,所以我把文件放到这个目录下就开始工作了……不知道是什么原因。

    提示:当您发现此类问题时,请正确查看错误消息,因为它会告诉您脚本失败时正在查找的位置,因此只需将文件放在该位置即可工作...

    享受\m/

    【讨论】:

    • 不要原因......什么,它开始工作,或者它首先在那个目录中查找?正如我在回答中所说,它看起来像是 JVM 启动时的工作目录;也许您有一个快捷方式来启动设置该工作区域的 NetBeans,或者您在启动项目时位于该目录中。它可能会根据您的启动方式而改变,因此告诉脚本在哪里查看会更安全,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多