Generar sentencias SQL con Oracle sqlplus desde un script bash

Que mejor que volver al blog con una entrada livianita, luego de tanto tiempo sin escribir no hay nada mejor que comenzar por algo poco exigente, así no salgo huyendo de aquí para volver a aparecer luego de seis meses.

El artículo de hoy trata acerca de como hacer un script bash que se conecte a nuestra base de datos Oracle, ejecute unas sentencias SQL cuya salida sean sentencias SQL en si mismas, y que dichas salidas se escriban directamente en un archivo de texto plano.

  1. Básicamente lo que tenemos que hacer es crear un archivo de texto plano, asignarle permisos de ejecución y luego editarlo:
    usuario@testsrv:~> touch generar_sentencias_sql.sh
    usuario@testsrv:~> chmod 755 generar_sentencias_sql.sh
    usuario@testsrv:~> vi generar_sentencias_sql.sh

  2. Una vez abierto agregarle un contenido similar al que sigue:
    #!/bin/bash

    # Script para generacion de sentencias SQL de creacion automatica de
    # usuarios del motor de base de datos a partir del contenido de una tabla.

    USERS_FILE=/tmp/usuarios.sql

    # Se exportan variables de entorno para Oracle 11G.
    export ORACLE_SID=orcl
    export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

    # Se llama a la herramienta sqlplus y se ejecuta la sentencia SQL especificada.
    $ORACLE_HOME/bin/sqlplus -S "mi_usuario/mi_contrasenia@orcl" << EOF > $USERS_FILE
    set linesize 500
    set pages 0
    set heading off
    set feed off
    SELECT ('INSERT INTO USUARIOS (LOGIN_USUARIO, NOMBRE_USUARIO) VALUES ('||U.LOGIN_USUARIO||', '''||U.NOMBRE_USUARIO||''');') AS INSERCION_USUARIOS
    FROM USUARIOS U
    WHERE U.LOGIN_USUARIO <> 'X';
    EOF
    En el ejemplo anterior el script genera las sentencias de inserción de los propios registros leídos de la tabla USUARIOS. Las rutas especificadas para las variables USERS_FILE y ORACLE_HOME son solamente de referencia, así como la propia sentencia SQL.

  3. Ahora ya solo nos resta ejecutar el script desde el intérprete de comandos o desde el programador de tareas automáticas crontab y debería funcionar:
    usuario@testsrv:~> ./generar_sentencias_sql.sh
    Por último verificamos que el archivo usuarios.sql contenga las sentencias SQL esperadas.
    usuario@testsrv:~> vi /tmp/usuarios.sql
Y eso nomas por el momento, que ya fue suficiente para dar el punta pié inicial al 2016.

Comentarios

  1. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar

Publicar un comentario