2014-10-06 3 views
1

Я новичок в работе с ORACLE над SSH (шпателем) на Ubuntu OS, на моей рабочей станции есть ОС Windows.Сценарий оболочки Ubuntu для ORACLE db

Я программирую оболочку, которая соединяется с DB оракула, затем экспортирует таблицу в текстовый файл, а затем удаляет некоторые записи в зависимости от значения столбца.

Нет установленного SQL Plus, и это необходимо, потому что нам нужно смоделировать инфраструктуру нашего клиента.

Это часть кода сценария:

#!/bin/bash 
su oracle 
export ORACLE_SID=ORA_SID 
export ORACLE_HOME=/uxx/app/oracle/product/11.2.0/client_1 
export TWO_TASK=[hostname]:[port]/[ORA_SID] 
isql -v [db] [user] [pass] <<EOF 
CREATE OR REPLACE DIRECTORY test AS '/xxx/yyy/'; 
DECLARE 
f utl_file.file_type; 
BEGIN 
f := utl_file.fopen('TEST','sample.txt','W'); 
for s in (select * from [table]); 
loop 
utl_file.put_line(f,s); 
end loop; 
utl_file.fclose(f); 
END; 
quit; 
exit 
EOF 

Когда я запускаю сценарий, я получил следующий вывод:

SQL> SQLRowCount returns -1 
SQL> [S1000][Oracle][ODBC][Ora]ORA-06550: line 1, column 7: 
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: 

begin function pragma procedure subtype type <an identifier> 
<a double-quoted delimited-identifier> current cursor delete 
exists prior 

[ISQL]ERROR: Could not SQLExecute 
SQL> [37000][Oracle][ODBC][Ora]ORA-00900: invalid SQL statement 

[ISQL]ERROR: Could not SQLExecute 
SQL> [S1000][Oracle][ODBC][Ora]ORA-06550: line 1, column 5: 
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: 

(begin case declare exit for goto if loop mod null pragma 
raise return select update while with <an identifier> 
<a double-quoted delimited-identifier> <a bind variable> << 
continue close current delete fetch lock insert open rollback 
savepoint set sql execute commit forall merge pipe purge 

[ISQL]ERROR: Could not SQLExecute 
SQL> [37000][Oracle][ODBC][Ora]ORA-00900: invalid SQL statement 

[ISQL]ERROR: Could not SQLExecute 
SQL> [37000][Oracle][ODBC][Ora]ORA-00900: invalid SQL statement 

[ISQL]ERROR: Could not SQLExecute 
SQL> [37000][Oracle][ODBC][Ora]ORA-00900: invalid SQL statement 

Любая помощь будет принята с благодарностью.

+0

С одной стороны, точка с запятой после оператора – OldProgrammer

+0

Хорошо, только для записи. Отмечено как с точкой с запятой, так и без нее, получить те же ошибки. – Cabrakan

+0

вам не хватает '/' после 'end;' http://stackoverflow.com/a/10207695/330315 (конечно, это справедливо только для SQL * Plus - я понятия не имею, что это за инструмент 'isql' которые вы используете. Это может иметь разные правила при определении альтернативного разделителя) –

ответ

0

Это привело к тому, что SqlPlus действительно был установлен в системе, но так как прошло много лет с тех пор, как я работал над системой UNIX, я не знал, как заставить приложение работать.

Я первый экспортировал путь бен к моему looged сессии:

export PATH=$ORACLE_HOME/bin:$PATH 

Тогда я мог бы запустить SQL Plus и использовать инструмент для катушки.

sqlplus usr/pass 

Теперь с SqlPlus я могу просто использовать обычную команду катушки.

Спасибо всем, кто помог.

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