@echo off :: :: establecer la codificación de los caracteres (850=MS-DOS, 1252=windows latín) ::set tblCod=850 set tblCod=1252 chcp %tblCod% >NUL :: Script para invocar Oracle Instant Client 10.x :: version 1.1 :: :: Si se le pasa como parámetro un fichero .sql (bien desde otro script, o arrastrando :: y soltando su icono sobre el de este fichero) inicia una sesión ORACLE que, si existe :: el fichero de órdenes ORAcmd_ini.sql (bien en el directorio de trabajo, o en el de :: defecto de ORACLE, SQLPATH) ejecuta en primer lugar ORAcmd_ini.sql, después el fichero :: suministrado como parámetro, y finalmente el fichero ORAcmd_fin.sql, si existe. :: En caso contrario inicia una sesión ORACLE interactiva. :: El objetivo de ORAcmd_ini.sql es generar un fichero .lst con la traza de la ejecución :: de la sesión de ORACLE, y el de ORAcmd_fin.sql es el de salir de la sesión de ORACLE. :: De este modo, si se desea guardar una traza de una sesión ejecutada interactivamente, :: basta con comentar en ORAcmd_fin.sql la línea con exit (--exit) y lanzar la ejecución :: de este script con un fichero .sql cualquiera (por ejemplo showDate.sql). :: Si no se encuentra el fichero ORAcmd_fin.sql, se produce un error que puede utilizarse :: para terminar la sesión ORACLE con una indicación de error (basta con descomentar en el :: fichero ORAcmd_ini.sql la línea WHENEVER OSERROR EXIT 1). Tal y como está configurado, :: se ignora el error y simplemente se pasa a modo interactivo, añadiendo al fichero .lst :: la traza de esta sesión. :: :: Si se define el nombre de usuario y el password, el inicio de sesión es automático :: :: Santiago Velilla 7 Abril 2014 :: Dpto. Informática e Ingeniería de Sistemas, Universidad Zaragoza :: set USER= set PASS= set SQL_ECHO=ON :: :: configuración de las variables de entorno para el instant_client de ORACLE set PATH=C:\Oracle\instantclient_10_2;%PATH% set TNS_ADMIN=C:\Oracle set SQLPATH=C:\Oracle set URL_ORASERVER=vicious.hendrix-oracle.cps.unizar.es set NLS_LANGUAGE=WE8PC850 set NLS_LANG=SPANISH_SPAIN.WE8MSWIN1252 ::set HOMEDRIVE=k: ::set HOMEPATH=%~dp1 ::---------------------------------------------------------------------------------------- if "%PASS%"=="" goto :comenzar set PASS=/%PASS% :comenzar if "%USER%"=="" ( set PASS= set /p USER=nombre de usuario: ) if "%USER%" NEQ "" goto :ini_config echo es obligatorio introducir el nombre de usuario pause goto :finERR :ini_config if "%1"=="" goto :interactivo :: configurar directorio de trabajo %~d1 cd %~dp1 ::dir ::pause :: el fichero ORAcmd_ini.sql se ejecuta justo tras la conexión a ORACLE :: por defecto se busca en el directorio de trabajo y, si no existe, se :: busca en el directorio de defecto de SQL. :: Si tampoco existe, la sesión será interactiva. :: set CMDINI=ORAcmd_ini.sql set CMDFIN=ORAcmd_fin.sql if not exist %CMDFIN% ( if exist %SQLPATH%\%CMDFIN% (set CMDFIN=%SQLPATH%\%CMDFIN%) ) if not exist %CMDINI% (set CMDINI=%SQLPATH%\%CMDINI%) if exist %CMDINI% goto :exeCmd echo fichero %CMDINI% no encontrado: ejecución interactiva ::pause goto :interactivo :exeCmd :: eliminar ficheros con trazas de ejecución anteriores if exist %~n1.lst del %~n1.lst if exist oracle_trz.lst del oracle_trz.lst ::echo ORA_ini="%CMDINI%" ORA_fin"%CMDFIN%" ::pause ::exit | sqlplus.exe %USER%%PASS%@%URL_ORASERVER% @%CMDINI% %1 %SQL_ECHO% %CMDFIN% @sqlplus.exe %USER%%PASS%@%URL_ORASERVER% @%CMDINI% %1 %SQL_ECHO% %CMDFIN% IF ERRORLEVEL 1 ( echo. echo fichero de terminación no encontrado pause ) :: renombrar el fichero de salida con la traza de la ejecución ren oracle_trz.lst %~n1.lst exit /b 0 :interactivo @sqlplus.exe %USER%%PASS%@%URL_ORASERVER% :finTASK exit /b 0 :finERR exit /b 1