Как передать запрос, хранящийся в переменной, в файл sql. Сценарий оболочки

Я создаю сценарий оболочки, в котором я сохранил записи из текстового файла в массив. Эти значения правильно хранятся и отображают правильное содержимое. Одна из этих записей содержит простой запрос, и я хочу передать его в файл 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 сам по себе не допускается.


person Alkey29    schedule 31.12.2013    source источник


Ответы (1)


Вам это не поможет?

PURGE_SITES=purge_site.txt
logmsg "USERID - $PURGES_SITE" n

QUERY=${Unix_Array[4]}


echo $QUERY
# FRAME YOUR QUERY, PROMPTING USER IN SHELL ITSELF AND SEND TO SQLPLUS DIRECTLY
# BEWARE SQL INJECTION POSSIBLE
# YOU CAN REDIRECT THE SQLPLUS OUTPUT TO A FILE LIKE THIS, NO SPOOL NEEDED
sqlplus -s $USER/$PASS <<EndSQL >> $OUTPUT_FILE
    set echo off ver off feed off pages 0
    $QUERY
    /
    EXIT SQL.SQLCODE
EndSQL
person Maheswaran Ravisankar    schedule 31.12.2013
comment
Спасибо за комментарий. Я сделал обходной путь, используя запрос select * from (% 2), и он все равно должен правильно возвращать столбец. - person Alkey29; 01.01.2014