2012-05-07 37 views
8

Estoy tratando de usar sql * plus para controlar un pequeño script de comando de Windows.¿Cómo se usa sql * plus en el script de comandos de Windows para controlar el flujo?

Básicamente, quiero ejecutar algunos PL/SQL (tal vez seleccionar de una vista o tabla o ejecutar una función) que me muestra el estado de algunas filas en la base de datos, y luego dependiendo del estado de las filas, realizar algunos comandos de Windows.

Mi problema es cómo devolver los resultados al script de comando.

sqlplus user/[email protected] @script.sql 

IF <CONDITIONAL HERE BASED on script.sql results> GOTO :runprocess 

REM log and email that process had to be skipped 
EXIT 

:runprocess 
REM run various Windows service commands 

Respuesta

5

Esto es lo que terminé usando.

Mi script cmd:

@ECHO OFF 
ECHO Checking Oracle... 

for /f %%i in ('sqlplus -s user/[email protected] @script.sql') do @set count=%%i 
echo %count% 

IF %count% GTR 0 GOTO :skipped 
GOTO :runprocess 

Dónde script.sql:

SELECT COUNT(*) 
FROM table 
WHERE criteria = 1; 

exit 
2

Hago algo como esto creando un archivo .bat que hace las cosas de Windows y llama a las secuencias de comandos sql según sea necesario. Use SQL para poner sus resultados en un archivo de texto que pueda leer.

... comandos del dos de aquí

sqlplus/nolog @ C: \ Dump \ DropRecreateUsers.sql

sqlplus/nolog @ C: \ Dump \ Cleanup.sql

.. .dos comandos

En sql, use este comando spool C: \ yourResults.txt o para usos más sofisticados cree un procedimiento que, al llamarlo, escribe los resultados en un texto archivo usando UTL_FILE

3

Le recomiendo encarecidamente que no use archivos .bat. Usted tiene muchas otras alternativas: C/C++ o VB, Windows scripting o Powershell, o incluso descargas gratuitas como Perl o Bash.

Pero aquí es un ejemplo de devolver códigos de error en los archivos .bat:

Pero por favor vistazo a algunos de los enlaces que he dado anteriormente. Evitar archivos .bat lo hará más fácil y lo hará más fácil de mantener en el futuro.

mi humilde opinión ...

1

le animo a echar un vistazo a los dos scripts incluidos en el Oracle XE para la copia de seguridad y restauración. Estos scripts me han enseñado mucho sobre cómo manejar scripts por lotes y Oracle en la plataforma de Windows.

  • C: \ OracleXE \ app \ oracle \ product \ 11.2.0 \ server \ bin \ backup.bat
  • C: \ OracleXE \ app \ oracle \ product \ 11.2.0 \ server \ bin \ Restore.bat
7

Probablemente escribiría el script (o el condicional, según los requisitos) del propio script.sql llamado.

Por ejemplo, el siguiente script.sql crea un .batwindows_commands.bat:

set feedback off 
set echo off 
set trimspool on 
set termout off 
set serveroutput on size 100000 format wrapped 
set lines 500 
set pages 0 

-- create the bat file to be executed later: 
spool windows_commands.bat 

declare 
    c number; 
begin 

    select count(*) into c from dual; 

    -- depending on a conditional, write the stuff to be executed into the 
    -- bat file (windows_commands.bat) 
    if c = 1 then 
    dbms_output.put_line('@echo everthing ok with dual'); 
    else 
    dbms_output.put_line('@echo something terribly wrong with dual'); 
    end if; 

end; 
/

spool off 

exit 

A continuación, puede llamar script.sql desde otro archivo .bat así:

@rem create oracle session, call script.sql 
sqlplus %user%/%password%@%db% @script.sql 

@rem script.sql has created windows_commands.bat. 
@rem call this newly created bat file: 
call windows_commands.bat 
0

Conectado a: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Producción de 64 bits Con la división , OLAP, Data Mining y Real Application Testing options

SQL> @f:\testa.txt 
Cuestiones relacionadas