Я создаю сценарий оболочки, в котором я сохранил записи из текстового файла в массив. Эти значения правильно хранятся и отображают правильное содержимое. Одна из этих записей содержит простой запрос, и я хочу передать его в файл sql. С помощью этого SQL-запроса я хочу сохранить результаты в текстовый файл.
Вот часть кода, которая вызывает файл sql для запуска сценария sql.
PURGE_SITES=purge_site.txt
logmsg "USERID - $PURGES_SITE" n
QUERY=${Unix_Array[4]}
echo $QUERY
sqlplus -s $USER/$PASS <<EndSQL
@purges_sites.sql $PURGE_SITES '$QUERY'
EXIT SQL.SQLCODE
EndSQL
на данный момент запрос, хранящийся в ${Unix_Array[4]}, "выберите -1 из двойного"
Вот содержимое файла .sql
set echo off ver off feed off pages 0
accept fname prompt 'Loading Sites...'
spool &1;
&2
/
spool off
Это дает мне ошибку и читает &2 как «&2» вместо запроса, сохраненного в переменной. Однако, когда я редактирую файл .sql и добавляю что-то заранее, он будет отображать правильные данные из переменной.
Вот результат
select -1 from dual
File Name===> results.txt
select -1 from dual
Loading Sites...SP2-0042: unknown command "&2" - rest of line ignored.
SP2-0103: Nothing in SQL buffer to run.
Вот результат, если я добавлю что-то перед &2.
select -1 from dual
File Name===> results.txt
select -1 from dual
Loading Sites...select * from table_table select -1 from dual
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
Я набрал select * from table_table перед &2. Таким образом, на самом деле это извлечение значения из переменной, но что-то должно произойти заранее, чтобы пройти правильно.
Есть ли в оракуле системная команда выполнения, которая будет выполнять запрос? &2 сам по себе не допускается.