цикл sql-запроса в bash-скрипте - PullRequest
1 голос
/ 01 февраля 2011

Мне нужно зациклить SQL-запрос Oracle с использованием bash.

Мой сценарий такой.У меня есть набор имен в текстовом файле, и мне нужно узнать детали этих имен, используя запрос sqlplus.

textfile.txt content:

john
robert
samuel
chris

bash script

#!/bin/bash

while read line
do
/opt/oracle/bin/sqlplus -s user@db/password @query.sql $line
done < /tmp/textfile.txt

sql query: query.sql

set verify off
set heading off
select customerid from customers where customername like '%&1%';
exit

Проблема заключается в том, что при запуске сценария возникают ошибки типа

SP2-0734: начало неизвестной команды "robert... "- остаток строки игнорируется.

Может кто-нибудь сказать мне, как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Все время я делаю так:

#!/bin/bash

cat textfile.txt |while read Name
do
sqlplus -s userid/password@db_name > output.log <<EOF
set verify off 
set heading off 
select customerid from customers where customername like '%${Name}%'
/
exit
EOF

Bash автоматически волшебным образом расширяет $ {Name} для каждой строки и помещает ее в команду sql перед отправкой в ​​sqlplus

1 голос
/ 01 февраля 2011

У вас есть set define on?Ваш подстановочный знак &?Вы можете проверить glogin.sql, чтобы узнать.

И да, установление n соединений для передачи n запросов, вероятно, не является хорошим решением.Может быть, вам быстрее развиваться, и вы сделаете это один раз, но если нет, то, возможно, вам следует подумать о разработке процедуры.

...