Parámetros de ejecución de Groovy SQL no están siendo reemplazados.
Este problema me está frustrando tanto que finalmente he creado una cuenta en Stackoverflow: esta es mi primera pregunta aquí, así que por favor sean comprensivos.
Tengo un script SQL como este:
select * from d_table
where id = :line;
Me gustaría ejecutar esa consulta desde un script Groovy. Hasta ahora, he escrito esto:
static void main(String[] args) {
String dbURL = 'some.db:Port:serviceName'
String dbUser = 'dbUser'
String dbPw = 'aReallyStrongPassword'
// Conectarse a una instancia y base de datos de SQL
def sql = Sql.newInstance(dbURL, dbUser, dbPw, 'oracle.jdbc.OracleDriver')
// Leer el archivo de entrada desde el directorio local
new File("inputfile.csv").eachLine { inputLine ->
// Bucle para recorrer el archivo de entrada
try {
// Leer el script SQL desde el directorio local
String sqlString = new File("script.sql").getText("UTF-8")
// Ejecutar el script SQL, reemplazando :line con el ID de entrada
resp = sql.execute sqlString, line: inputLine
} catch(Exception e) {
println(e)
}
}
// Cerrar la sesión de SQL
sql.close()
}
Pero siempre obtengo un error como este:
AVISO: No se pudo ejecutar: select * from d_table
where id = :line; porque: ORA-00933: comando SQL no terminado correctamente
Tengo la sensación de que la consulta no está construida correctamente, pero ¿cuál es el problema? Estoy usando Groovy 3.0.4.
davy.ai
Parece que estás intentando ejecutar una consulta SQL desde un script de Groovy. Parece que tienes el código correcto para conectarte a la base de datos y leer la consulta SQL de un directorio local. Sin embargo, parece que la consulta no se está construyendo correctamente, ya que estás recibiendo un mensaje de error
ORA-00933: comando SQL no finalizado correctamente
.Es difícil determinar el problema exacto sin más información. Puede ser útil revisar la sintaxis de la consulta, así como los tipos de datos de los parámetros que se están pasando. Además, puede ser útil revisar la documentación de la base de datos que estás utilizando para asegurarte de que la consulta se está construyendo correctamente.