Sentencias SQL en un file por lotes de Windows

¿Hay alguna forma de tener un file de process por lotes de Windows que ingrese directamente las declaraciones de SQL sin llamar a un script? Quiero que el file por lotes inicie session en SQL y luego ingrese las declaraciones directamente.

EDITAR: estoy usando Oracle v10g

Para un solo command puedes usar este truco:

echo select * from dual; | sqlplus user/pw@db 

Para ejecutar algo en SQL Server 2005/2008, puede usar la utilidad de command-line sqlcmd . sqlcmd -h imprime la list de conmutadores.

Respuesta corta: No. Los files por lotes por sí solos no pueden hacer esto.

Respuesta larga: puede acercarse, dependiendo del tipo de server de database que esté utilizando y de las capacidades que proporciona el cliente de command-line.

¿Qué tipo de server de database está utilizando? Oracle, mySql, Sybase, Microsoft, Terradata, ???

Por ejemplo, con una database de Sybase, puede usar el cliente de command-line isql para ejecutar desde un file por lotes:

 isql -S server -D database -U user -P password -i script 

Puede usar sqlcmd (para el server sql) o System.Data.Odbc.OdbcCommand de powershell .

El command odbc del set de herramientas de outwit le permite ejecutar sentencias select en cualquier database para la cual se haya definido una fuente de datos ODBC apropiada.

Puede usar http://tekkies.co.uk/go/runsqloledb

por ejemplo, RunSQLOLEDB "Provider = SQLOLEDB; Data Source = (local); …" "SELECT GetDate ()" o RunSQLOLEDB @ ConnectionString.txt @ Query.sql

Aquí hay un script de ejemplo aproximado para MSSQL que puede ser modificado para Oracle:

 @ECHO off SETLOCAL ENABLEDELAYEDEXPANSION :: batch file for sql query SET STARTDATE=20101010 SET ENDDATE=20111109 SET AGENCYNAME=Agency SET DBNAME=AccidentDB SET SQLSTRING=SELECT Acc.INC_ID,^ Veh.MAKE, Veh.MODEL, Veh.LIC_NUM^ FROM Acc,^ lnk_Acc_Veh, Veh^ WHERE (INC_NUM LIKE '20115000%')^ AND lnk_Acc_Veh.link_id=Veh.key^ AND lnk_Acc_Veh.link_id=Acc.key^ AND Acc.date ^> '%STARTDATE%' OR Acc.date ^< '%ENDDATE%'; CLS @ECHO. @ECHO. @ECHO DBNAME is %DBNAME% @ECHO. @ECHO SQLSTRING is "!SQLSTRING!" @ECHO. @ECHO ------------------------------------------------------ @sqlcmd.exe -b -S localhost -E -d !DBNAME! -Q "!SQLSTRING!" -W @ECHO. @ECHO Report is done. Hit any key to close this window.... @pause>nul