проблема с oracle sqlplus с пробелами в пути команды @

Я запускаю Oracle 11g в Linux, и я пытаюсь запустить скрипт, который создаст мою базу данных. Этот скрипт отлично работает в windows, но когда я тестирую его на Linux, я получаю следующую ошибку:

SP2-0556: Invalid File Name

проблема может быть в том, что путь к имени файла присутствует пробел. Я собираюсь упростить проблему до одной из многих команд, которые я запускаю в файле, чтобы сделать ее простой. Пример команды, которую я пытаюсь запустить, выглядит так:

sqlplus [uname]/[pw] @'../database/My Schema/create_sequence.sql'

в create_sequence.в sql-файле есть две простые команды create sequence, которые отлично работают сами по себе. Я сильно подозреваю, что это связано с пробелом, потому что, когда я изменяю имя каталога из моей схемы на MySchema и соответственно изменяю вышеуказанную команду sqlplus, скрипт работает нормально.

как я уже сказал, этот скрипт работает в windows с пробелами, но не в Linux. Я подозреваю, что пробелы могут не поддерживаться, но мне было интересно, знал ли кто-нибудь другой или есть работы вокруг?

Примечание: запуск команды вроде:

more ../database/My Schema/create_sequence.sql

или

more "../database/My Schema/create_sequence.sql" 

выводит содержимое файла на консоль, как и следовало ожидать. Итак, я думаю, что это sqlplus (и linux).

7 ответов


я подключился к одному из моих ящиков Linux и смог довольно легко воспроизвести эту проблему. Кажется, нет никакого способа, которым я могу найти, чтобы выполнить файл с параметром " @ " из командной строки, поэтому я думаю, что у вас остались следующие параметры для работы:

  1. переименовать Мои Схемы каталог больше не имеет места в нем (а также обновление всех других скриптов, которые ссылаются на него
  2. выполнить файл из каталога, в которой он находится (я подтвердил, что это работает, см. ниже)
  3. отправить файл в sqlplus через stdin (см. ниже)

вы также должны подать отчет с поддержкой Oracle, поскольку может быть простое исправление, которое они могут предоставить.

Пример Команды:

Из Каталога

cd ../database/My\ Schema
sqlplus [uname]/[pw] @create_sequence.sql

через stdin

sqlplus [uname]/[pw] < ../database/My\ Schema/create_sequence.sql

Ну, если это проблема Linux (см. Мой комментарий к вашему вопросу - он отлично работает на Solaris), вам, возможно, придется попробовать что-то вроде:

sqlplus [uname]/[pw] < '../database/My Schema/create_sequence.sql'

однако вы сталкиваетесь с проблемами, если пытаетесь передать параметры в свой SQL-скрипт...

EDIT: кажется, проблема Metalink возникает для очень похожей проблемы:"ошибка 7150873 SQL-скриптов с именем файла, содержащим пробелы, приводит к SP2-0556". Он указан как влияющий на 10.2.0.4 и 11.1. Это предположительно исправлено в 10.2.0.5 и 11.2, ни одно из которых пока не доступно. Он говорит, что это общая проблема, затрагивающая большинство/все платформы, поэтому я не знаю, является ли это вашей проблемой или нет.

конкретный текст проблемы: "команда sqlplus START не выполняет сценарии SQL, которые имеют пробел в имени файла."

просто для усмешки, что произойдет, если вы сделаете следующее:

sqlplus [uname]/[pw]
start '../database/My Schema/create_sequence.sql'

EDIT2: я не знаю, возможно ли изменение ваших сценариев оптом или нет, но обходной путь может быть:

cp '../database/My Schema/file2run.sql' ./temp.sql
sqlplus [uname]/[pw] @temp.sql
rm ./temp.sql

вам нужно будет обернуть каждый вызов sqlplus таким образом. Другой вариант - создать сценарий оболочки, скажем, с именем mysqlplus.sh:

#!/bin/sh
cp  ./temp$$
sqlplus  @
rm ./temp$$

затем измените сценарии сборки следующим образом:

mysqlplus.sh [uname]/[pw] '../database/My Schema/create_sequence.sql'

Если вы ставите кавычки вокруг пути, это работает:

SQL > START "C:\Documents and Settings\Administrator\demobuild.sql" 

Это не работы:

SQL > START C:\Documents and Settings\Administrator\demobuild.sql 

по данным этой теме на сайте OTN SP2-0556 может быть вызвано недопустимыми пробелами в выполняемом файле. Вероятно, Linux-версия SQL-Plus не знает, как обращаться с символами новой строки Windows. Попробуйте удалить существующий файл и воссоздать его с помощью нужных команд (вы сказали, что есть только 2 команды DDL, поэтому это должно быть легко).


вы пытались избежать пробела?

попробуй:

sqlplus [uname]/[pw] @'../database/My\ Schema/create_sequence.sql'

Если вы работаете с этим под linux, вы можете избежать пространства с символом"\", таким как:

sqlplus [uname]/[pw] @../database/My\ Schema/create_sequence.sql

Я знаю, что это старый вопрос, но я просто столкнулся с той же ситуацией, и после многих попыток я заставил его работать, и я хочу поделиться своим решением, он просто поставил путь в кавычки, как это:

@"C:/Users/john/AppData/Roaming/SQL разработчик/тест.sql";