Você não pode fazer o background de um subshell e capturar sua saída em uma variável confiável com um constructo como foo=$(some_value_of_bar_that_takes_a_while) &
; você precisará contornar essa limitação. Por uma questão de brevidade:
loading_wheel() {
# is defined here
}
scratch=$(mktemp); trap "rm -f $scratch" EXIT
get_db_val "$conn" "select 'test' from dual;" > $scratch &
loading_wheel $!
result="$( cat scratch )"