Передача имени файла с пробелами в команду 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 имеет ту же идею: оно не любит пробелы. Итак, исправление очевидно: спул в каталог без пробелов. Это совет, кто угодно может принять или нет.

Другие вопросы по тегам