2016-01-18 2 views
1

я долженSQL * Plus @@ поведение с пробелами в пути родительского сценария

  1. Connect
  2. Вызов SQL-скрипт
  3. Выход SQLPLUS

Итак, я создал sql-script run.sql:

set def on 
WHENEVER SQLERROR EXIT ROLLBACK 
conn &2 
@"&1"; 

exit; 

Например, у меня есть sql- скрипты в папку "C: \ папку с пробелами \":

а) install.sql с содержимым:

prompt Hello 
@@a.sql 
@@b.sql 

б) и, конечно, у меня есть a.sql и b.sql файлы в папку с некоторыми действиями.

Итак, я пытаюсь запустить мой сценарий:

sqlplus /nolog @"Path_to_Run\run.sql" \"c:\folder with spaces\install.sql\" user/[email protected] 

И я получил результат:

Hello 
SP2-0310: unable to open file "c:\folder.sql" 

Таким образом, он может открыть install.sql, но не может открыть @@ a.sql , Он пытается запустить такой скрипт:

@c:\folder with spaces\a.sql 

Но как я могу разместить здесь цитаты? Он должен запустить скрипт a.sql внутри папки «c: \ folder with spaces».

+1

Если у вас есть доступ, см. Документ MOS 745780.1, описывающий это поведение. К сожалению, вам нужен обходной путь, как и тот, который предоставляет StephaneM. –

+0

Существует решение. Спасибо – usbo

ответ

1

Благодаря Alex Poole, ответ в документации

SP2-0310 Error when Calling a SQL Script in Another Script using @@ and the Path to the Parent Script Contains Spaces (Doc ID 745780.1)

И есть три решения:

  1. Используйте кнопки 8dot3 обозначения. Например. Используйте PROGRA ~ 1 вместо «Program Files».

  2. Избегайте сохранения сценариев sql на пути, содержащем пробелы в именах папок.

  3. cd в каталог, содержащий скрипт вместо того, чтобы предоставлять полный путь при вызове скрипта в SQL * Plus.

Первый способ не работает для меня в Windows 7 (есть много работы по настройке 8dot3 в Win7). Я получаю:

>cd c:\folder~1 
The system cannot find the path specified. 

Второй метод тоже не работает для меня, я не могу управлять этими папками.Я должен использовать их как есть.

И третий метод работает отлично (но по-другому, чем в предыдущем сообщении):

cd "c:\folder with spaces" 
sqlplus /nolog @c:\run\run.sql install.sql user/[email protected] 

Таким образом, вы должны изменить реж до того SQLPLUS, хозяин кд не работает.

Спасибо, ребята.

1

Вы можете разделить ваши параметры так, что run.sql содержит

set def on 
WHENEVER SQLERROR EXIT ROLLBACK 
conn &2 
host cd "@3" 
@"&1"; 

exit; 

и вызвать его с

sqlplus /nolog @"Path_to_Run\run.sql" \"c:\folder with spaces\" install.sql user/[email protected] 

Обратите внимание, что это, возможно, потребуется некоторые настройки, он не работает на моем компьютере из-за cygwin messing со своим собственным компакт-диском.

+0

Это также не работает. Я добавил еще одну строку «_host cd_» ниже «_host cd» и 1 «_», чтобы прочитать текущий путь и что я вижу? Я вижу: _c: \ run_, поэтому я получаю ошибку: не удалось открыть файл «install.sql» – usbo

Смежные вопросы