2010-05-31 3 views
0

У меня есть файл для выполнения в Ksh, написанный кем-то. Он имеет набор команд для выполнения в sqlplus.Запуск pl/sql в Korn Shell (AIX)

Он начинается с того,

sqlplus -s $UP <<- END 

с последующим набором DDL команд, таких как создание, падение и т.д..,

Когда я исполняю файл в оболочке, я получаю сообщение об ошибке в стартовая строка, приведенная выше. Я понимаю, что «-s» запускает sqlplus в бесшумном режиме, а $ UP - это строка соединения с именем пользователя/паролем. Но я не мог сделать головы или хвосты «< < - END» (многие сайты из google говорят, что перенаправление ввода «< <« не »< < -»). Поэтому я предположил, что ошибка должна быть в этой части и удалить ее из файла. Теперь он читает,

sqlplus -s $UP 

Но когда я исполняю файл, он ожидает ввода от оболочки, а не читать остальную часть строки из файла. Как сделать sqlplus для выполнения команд ddl в остальной части файла ?. Заранее спасибо.

+0

Где проблема? Работает ли исходный скрипт или нет? << - (а также <<<) - это полное юридическое перенаправление под названием «Here Document», а это означает, что все следующие строки должны быть поданы в качестве стандартного ввода команды, пока разделитель (в вашем случае, END) . Посмотрите на man-страницу ksh для более подробного объяснения. – Juraj

+0

@Juraj. Это отчасти работало частично. Он жаловался, что не знал, что означает «КОНЕЦ». – learner135

+0

Дефис в '<< -' позволяет отступать от блока с помощью ведущих вкладок для удобства чтения. Вкладки будут удалены, чтобы они не влияли на содержимое блока. Без дефиса ведущие вкладки могут быть значительными в зависимости от контекста. –

ответ

1

Здесь «END» является маркером блока, а «-» не требуется.

Для запуска sqls из сценария оболочки один простой пример приведен ниже.

sqlplus system/manager << ENDOFSQL 

     whenever sqlerror exit sql.sqlcode; 
     select sysdate from dual; 
     exit; 
ENDOFSQL 

Спасибо,

Rinson KE DBA