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
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.
No tengo ningún inconveniente.
Gracias
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.
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.