Как использовать результат sql, хранящийся в переменной оболочки? - PullRequest
0 голосов
/ 12 сентября 2011

Теперь я знаю, как сохранить результат sql procédure в переменной оболочки

testvar=$(sqlplus foo/bar @test.sql)

my test.sql возвращает список целых чисел, которые я использовал бы в другом вызове select моей оболочкой. Цель этой процедуры - показать прогресс в моем лечении, например

x=0;
while x <testvar.size
sqlplus foo/bar @test2.sql $testvar.x
print (x*100/testvar.size + "%")
end while 

(я не знаю программирования оболочки, но это проще, чем моя текущая проблема ...

1 Ответ

2 голосов
/ 12 сентября 2011

Если вывод sqlplus в буквальном смысле "Список целых чисел", как вы описываете, то это достаточно просто.

SOMETHING=5

while -r read n ; do
    if [ $n -ge $SOMETHING ] ; then
        break
    fi
    sqlplus foo/bar @test2.sql "$n"
    printf '%.2f%%\n' $(expr "$n" \* 100 / "$SOMETHING")
done < <(sqlplus foo/bar @test.sql)

Предполагая, что "Список целых чисел" действительно означает "Новая строкаразделенный список целых чисел "

Мне не ясно, что должны представлять $testvar.x и testvar.size, поэтому я сделал несколько предположений и оставил переменную $SOMETHING, чтобы заменить то, что testvar.size являетсядолжно быть.Если вы хотите, чтобы общее число целых чисел в списке составляло sqlplus, тогда оно было бы другим и делалось бы так:

intlist=($(sqlplus foo/bar @test.sql))

for n in "${intlist[@]}"; do
    if [ $n -ge ${#intlist[@]} ] ; then
        break
    fi
    sqlplus foo/bar @test2.sql "$n"
    printf '%.2f%%\n' $(expr "$n" \* 100 / ${#intlist[@]})
done < <(sqlplus foo/bar @test.sql)

Если ваш вывод более сложный, потребуется выполнить дополнительную фильтрациюпередний.

...