Buen día. Quiero compartir con ustedes este intento de script. Solo automatiza la descarga de información basada en sentencias de base de datos (con sqlplus) en un archivo de texto plano y separado por un delimitador. Cualquier comentario, sugerencia o mentada es bienvenida…
#!/bin/sh
ayuda () { echo '
#========================================================================================================
#
# SCRIPT: descargaDATOS-sql.sh
#
# USO: ./descargaDATOS-sql.sh [-b BD] [-s] [-d delimitador] [-o destino] sentencia
# ./descargaDATOS-sql.sh [-b BD] [-s] [-d delimitador] [-o destino] -f sentencias
#
# DESCRIPCION: Permite realizar una sentencia en la bd indicada y el resultado
# se entrega separado por $sep y se puede guardar en archivo o en consola
#
# OPCIONES: -b BD Indica la base de datos a usar. Por omision es BD1usuarioA
# si el que recibe no lo encuentra, emplea esa cadena.
# -s Conservar el espacio vacio del campo (SI). Por omision NO.
# -d delimitador El delimitador entre campos. Por omision |
# -o destino Archivo donde se guarda el resultado
# -f sentencias Archivo donde se encuentran las sentencias. Por omision se ejecuta la
# sentencia del parametro, por lo que son mutuamente excluyentes.
# DEPENDENCIAS: sqlplus
# BUGS: ---
# NOTAS: Si existe error en el sql termina con estado 1 y deja el log en /tmp
# VERSIONES: 20081216 0.0.4 OHS Cambio en de [-s SI] a [-s]
# 20081120 0.0.3 OHS Se valida error en sentecias
# 20081118 0.0.2 OHS Se agrego escoger BD y paso por opciones
# 20081113 0.0.1 OHS Creacion
# URL: http://petrohs.googlepages.com/descargaDATOS-sql.sh
#========================================================================================================
' | more;}
#ayuda
if [ "$1" = "" -o "$1" = "-h" -o "$1" = "--help" ]
then
ayuda;
exit 1;
fi
#opciones por omision
_CONFS="/ruta/a/confs";
_SID=`egrep "^BD1usuarioA" $_CONFS/sids | cut -d: -f2`;
_ESP="NO"; #-s
_DEL="|"; #-d
_DES="NO"; #-o
_ORI="NO";
_tmpF="/tmp/descargaDATOS-sql.sh-`date +%Y%m%d%k%M%S%N`";
#leyendo opciones de linea comandos
while getopts b:o:sd:f: _opciones
do
case "$_opciones" in
f)
_ORI="$OPTARG";
;;
b)
_SID=`egrep "^$OPTARG:" $_CONFS/sids | cut -d: -f2`;
if [ "$_SID" = "" ]
then
_SID="$OPTARG";
fi
;;
o)
_DES="$OPTARG";
;;
s)
_ESP="SI";
;;
d)
_DEL="$OPTARG";
;;
?)
ayuda;
exit 2;
;;
esac
done
shift `expr $OPTIND - 1`
#sentencia
if [ $_ORI = "NO" ]
then
_query="$1;";
else
_query=`cat $_ORI`;
fi
if [ "$_DEL" = "NO" ]
then
_delimitador="";
else
_delimitador="set colsep $_DEL";
fi
#consulta
echo "--sentencia
set feedback off
set verify off
set heading off
set tab off
set pagesize 0
set lin 10000
set trim on
set spa 0
$_delimitador
$_query
" | sqlplus -s $_SID > $_tmpF;
egrep "ERROR at|ORA-.*:|SP.+-.*:" $_tmpF >/dev/null
if [ "$?" -ne 1 ]
then
echo "descargaDATOS-sql.sh: Error en BD; $_tmpF";
exit 1;
fi
#espacios de campos
if [ "$_ESP" != "SI" ]
then
cat $_tmpF | sed -e "s/^ *//" -e "s/$_DEL */$_DEL/g" -e "s/ *$_DEL/$_DEL/g" -e "s/ *$//" > $_tmpF-tmp;
mv $_tmpF-tmp $_tmpF;
fi
#archivo o pantalla
if [ "$_DES" = "NO" ]
then
cat $_tmpF;
# rm $_tmpF
else
mv $_tmpF $_DES
fi
#"Hombres haga, quien quiera hacer pueblos" Jose Marti
exit 0;
El archivo de sids contiene
$ cat sids
BD1usuarioA:usuarioA/password@BD1
BD2usuarioB:usuarioB/password@BD2
Y muchas gracias POP por La Cofradía recargada
Leave a Reply
You must be logged in to post a comment.