Передача имени файла с пробелами в команду SPOOL с использованием SQL Plus приводит к ошибке SP2-0768 Недопустимая команда SPOOL
Мой файл sql содержит
`SPOOL &1;
//sql code to execute
SPOOL OFF;`
Файл sql выполняется с использованием SQL Plus, а SQL Plus вызывается из кода C# с использованием Process.Start... Код отсечен
`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"), файл журнала не создается, а вместо этого выдает ошибку SP2-0768 Недопустимая команда SPOOL в окне SQL Plus
Любое предложение, как решить эту проблему? Я использую Oracle 11GR2
2 ответа
Вам просто нужно заключить имя файла в двойные кавычки. Что-то вроде:
spool "Test with spaces.txt"
Или в вашем случае с параметром:
SPOOL "&1"
Я думаю, что лучше не использовать пробелы, как объясняет @tvCa.
Примечание:
Я полагаю, что StarPilot ссылается на перенаправление вывода команды в файл, и именно поэтому он не работал, когда вы пытались его использовать. Например, в командной строке вы должны написать:
dir > dir.txt
И это сохраняет вывод dir внутри dir.txt.
Программное обеспечение Oracle предназначено для использования с каталогами, не имеющими пробелов (что является общепринятым стандартом в Linux/Unix, хотя технически вы можете сделать иначе). В Windows все по-другому, но программное обеспечение Oracle имеет ту же идею: оно не любит пробелы. Итак, исправление очевидно: спул в каталог без пробелов. Это совет, кто угодно может принять или нет.