Entrada de arquivo para a instrução select no shell scipt

0

Eu tenho um arquivo de texto que tem entradas para a instrução de seleção.

sqlplus -s $USERNAME/$PASSWORD@$HOST<<EOF

spool $DIRECTORY/UPDATE.xls

select acc,cr,dr from count
where acc in ***$DIRECTORY/acc.txt***;

spool off;
exit
EOF

Por favor, deixe-me saber como usar o arquivo de texto como entrada na parte destacada.

    
por sasi kanth 25.03.2017 / 07:26

2 respostas

2

Primeiro, leia o arquivo em uma matriz.

Isto é para um arquivo contendo os valores em uma única linha:

read -ar values < "$DIRECTORY"/acc.txt

Para um arquivo de múltiplas linhas, use um loop (um valor por linha):

while read -r v; do
    values+=("$v")
done < <(cat "$DIRECTORY"/acc.txt)

De acordo com o comentário de Archemar, a sintaxe SQL é var in ( "value1", "value2", ... ) , então é necessário algum processamento de texto.

Primeiro, citando:

for i in "${values[@]}"; do quoted_values+=(\""$i"\"); done

Em segundo lugar, delimitando com vírgulas e espaços:

limit="${#quoted_values[@]}"
for ((i=0; i<"$limit"; i++ )); do
    values_string="$values_string""${quoted_values[$i]}"
    ((limit-i-1)) && values_string="$values_string",
    values_string="$values_string"" "
done

Os colchetes ao redor da lista de valores aparecerão no documento aqui.

sqlplus -s "$USERNAME"/"$PASSWORD"@"$HOST"<<EOF

spool "$DIRECTORY"/UPDATE.xls

select acc,cr,dr from count
where acc in ( "$values_string" );

spool off;
exit
EOF

Não testado, então pode haver um erro de digitação, etc. Comente se você tiver problemas.

    
por 25.03.2017 / 09:55
0

uma maneira muito simples de selecionar seu arquivo de texto é

cat ${DIRECTORY}/UPDATE.txt |

while read acc_id ; do

       select acc,cr,dr from count
       where acc in ${acc_id};

done

é isso.

espero que ajude.

    
por 25.03.2017 / 12:39