Я новичок в работе с 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
Любая помощь будет принята с благодарностью.
С одной стороны, точка с запятой после оператора – OldProgrammer
Хорошо, только для записи. Отмечено как с точкой с запятой, так и без нее, получить те же ошибки. – Cabrakan
вам не хватает '/' после 'end;' http://stackoverflow.com/a/10207695/330315 (конечно, это справедливо только для SQL * Plus - я понятия не имею, что это за инструмент 'isql' которые вы используете. Это может иметь разные правила при определении альтернативного разделителя) –