我的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.....`
它工作正常,sqlplus日志在sqlLogFileName位置创建正常。但是,如果sqlLogFileName之间有空格(例如" C:\ My Application \ log.txt"),则不会创建日志文件,而是在SQL Plus上给出错误SP2-0768 Illegal SPOOL命令窗口
有任何建议如何解决这个问题?我正在使用Oracle 11GR2
答案 0 :(得分:0)
Oracle软件旨在用于没有空格的目录(这是Linux / Unix中公认的标准,即使技术上你可以做其他事情)。在Windows上,情况有所不同,但Oracle软件也有同样的想法:它不喜欢空白。因此,修复是明确的:假脱机到没有空格的目录。这是建议,任何人都可以自由选择。
答案 1 :(得分:0)
您只需用双引号括起您的文件名即可。 类似的东西:
spool "Test with spaces.txt"
或者在您的情况下使用参数:
SPOOL "&1"
我认为最好不要使用空格,正如@tvCa所解释的那样。
旁注:
我相信StarPilot所指的是关于redirect a command output to a file的内容,这就是为什么当你尝试使用它时它没有用的原因。 例如,在命令提示符下,您将写:
dir > dir.txt
这样可以在dir.txt中保存dir的输出。