¿Cómo puedo ejecutar múltiples sentencias SQL de Oracle con .NET?

Como parte de nuestro process de compilation, queremos ejecutar SQL Scripts que consisten en sentencias DDL y DML contra una nueva instancia de database.

ADO.NET Connection / Command no puede manejar esto sin analizar y dividir los scripts.

La utilidad de command-line sqlplus puede ejecutar scripts solo de forma interactiva y no es adecuada para el uso por lotes.

¿Qué me estoy perdiendo? ¿Cómo se pueden ejecutar scripts sql al usar Oracle?

¿Por qué crees que la utilidad SQL Plus no es adecuada para el uso por lotes? Es bastante común usarlo para ejecutar este tipo de secuencias de commands: puede pasar el script a SQL Plus cuando lo invoca si lo desea, es decir,

 sqlplus scott/tiger@someDatabase @someScript.sql 

Esa es una forma bastante común de implementar construcciones.

Si el problema es con la forma en que SQL * Plus maneja los errores, simplemente puede agregar la línea

 WHENEVER SQLERROR EXIT SQL.SQLCODE 

para abortar y arrojar el número de error de Oracle que se encontró. La documentation del command WHENEVER SQLERROR también proporciona varias otras opciones.

Devdimi,

Estoy de acuerdo con Erik K.

Y sí, puede include DDL en un bloque anónimo.

 DECLARE BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE foo'; END; 

Recuerde que DDL hace un commit ANTES y DESPUÉS de que se ejecute. Entonces, como parte de una transacción, es una mierda.

Creo que puedes hacerlo si envuelves la statement dentro de DECLARE / BEGIN / END. Ya no tengo acceso a Oracle, así que no puedo probarlo. Ejemplo:

 DECLARE BEGIN INSERT INTO ...; UPDATE something ...; END; 

Como desea ejecutar DDL, use EXECUTE IMMEDIATE .