É bem comum para quem trabalha com Unix ou Linux fazer script para executar um select em banco de dados – no nosso caso utilizaremos o Oracle via SQLPlus – e salvar o resultado em aquivo texto.
Segue um exemplo:
DATAREF=$1
ORACLE_SID=BD1
ORA_USER=USER_A
if [ -z $1 ]; then
sqlplus $ORA_USER@$ORACLE_SID @sqlF.sql < .db.${ORA_USER}.${ORACLE_SID}.pwd 1>/dev/null
else
sqlplus $ORA_USER@$ORACLE_SID @sql.sql $DATAREF < .db.${ORA_USER}.${ORACLE_SID}.pwd 1>/dev/null
fi
tr -d ' ' < /home/User/tmp.txt > /home/User/out.txt
rm /home/User/tmp.txt
Explicação:
Primeiramente são inicializadas as variáveis, nesse caso DATAREF recebe o primeiro parâmetro informado na execução, as outras variáveis armazenam o nome do usuário e do banco.
Temos dois comportamentos diferentes caso a chamada do script tenha ou não a data informada como parâmetro, para isso o if com “-z” verifica se é nulo ou o tamanho é igual a zero.
Em seguida é feita a conexão com o BD via SQLPlus, para isso é passado o usuário@nome-do-banco, o script SQL que será executado é o @sqlF.sql seguido do arquivo que contém a senha para conexão, perceba que a senha é gravada em um arquivo oculto (que inicia por “.”, .db.${ORA_USER}.${ORACLE_SID}.pwd). Para finalizar, é configurado para não mostrar o sysout “1>/dev/null“.
Ao final temos uma situação interessante, é preciso retirar todos os espaços em branco do arquivo, para isso o comandodo bash “tr” é perfeito!