(script) Descarga de información de BD

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


0 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 50 votes, average: 0.00 out of 5 (0 votes, average: 0.00 out of 5)
You need to be a registered member to rate this post.
Loading...
Bases de Datos, Programacion | RSS 2.0 |     499 views

RSS feed

4 Comments »

Comment by jrivero
2008-12-16 22:26:31

Siempre he dicho un proyecto nunca es pequeño ni inutil, bien y gracias por compartir tu script, te molesta si lo publico en vive-libre.org??, claro bajo tu nombre, saludso y suerte.

Comment by petrohs
2008-12-19 18:13:48

No tengo ningún inconveniente.
Gracias

 
 
Comment by makz
2008-12-16 22:54:20

Todo esto de los scripcitos y demás trozos de código esta muy bien, pero hay algo que no me gusta. Por el formato de cofradía con el tiempo se van a ir perdiendo estos post.

También sólo funcionan para cierta versión del software. Eso debería indicarse, no es bueno perder el tiempo en probar algo que postearon hace años pero que ya no funciona con versiones más recientes del software. Por ejemplo en este script no dice para qué versión de windows es.

Otra cosa es que si yo ando buscando algo así ¿cómo se supone que lo encuentre fácilmente? ¿sólo por las palabras clave? en mi opinión esto debería agruparse por categorías, pero algo más ordenado que con las etiquetas como se tiene actualmente.

Comment by petrohs
2008-12-19 18:16:17

Gracias por la anotación sobre el entorno:
Esta versión trabaja con bourn shell en sistemas estilo unix. En winbug$ funciona desde cygwin. Se ha probado con sqlplus para oracle 8, 9 y 10.

 
 
Name (required)
E-mail (required - never shown publicly)
URI
Your Comment (smaller size | larger size)
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> in your comment.

Trackback responses to this post