0

我的 sql 文件包含

`SPOOL &1;
//sql code to execute
SPOOL OFF;`

使用 SQL Plus 执行 sql 文件,并使用 Process.Start 从 C# 代码调用 SQL Plus... 代码片段

`var m_StartInfo = new ProcessStartInfo();
m_StartInfo.FileName = "SQLPLUS.EXE";
m_StartInfo.CreateNoWindow = true;
m_StartInfo.UseShellExecute = false;
m_StartInfo.Arguments = String.Format("{0}\"{1}\" \"{2}\"", connectionString, sqlfile, sqlLogFileName);
m_Process = Process.Start(m_StartInfo);
Other code.....`

它工作正常,并且在 sqlLogFileName 位置创建了 sqlplus 日志。但是,如果 sqlLogFileName 之间有空格(比如“C:\My Application\log.txt”),则不会创建日志文件,而是在 SQL Plus 窗口上给出错误 SP2-0768 Illegal SPOOL 命令

任何建议如何解决这个问题?我正在使用 Oracle 11GR2

4

2 回答 2

1

您只需用双引号将文件名括起来。就像是:

spool "Test with spaces.txt"

或者在您的情况下使用参数:

SPOOL "&1"

正如@tvCa 解释的那样,我认为最好不要使用空格。

边注:

我相信 StarPilot 所指的是将命令输出重定向到文件,这就是为什么当您尝试使用它时它不起作用的原因。例如在命令提示符下你会写:

dir > dir.txt

这将 dir 的输出保存在 dir.txt 中。

于 2015-07-28T13:35:33.130 回答
0

Oracle 软件设计用于不包含空格的目录(这是 Linux/Unix 中公认的标准,尽管从技术上讲您可以这样做)。在 Windows 上,情况有所不同,但 Oracle 软件有相同的想法:它不喜欢空格。因此,修复很明确:假脱机到没有空格的目录。这是建议,任何人都可以自由接受或不接受。

于 2014-11-23T13:22:43.393 回答