运行 来自 Groovy 中文件的 ddl 脚本

Run ddl script from file in Groovy

我与 Spock 和 Groovy 一起工作以测试我的应用程序。在 运行 每次测试之前,我应该需要 运行 一个 ddl 脚本。 要从 Groovy 执行脚本,我使用以下代码:

    def scriptToExecute = './src/test/groovy/com/sql/createTable.sql'
    def sqlScriptToExecuteString = new File(scriptToExecute).text
    sql.execute(sqlScriptToExecuteString)

createTable.sql 是一个复杂的脚本,它执行多个删除和创建操作(当然它是多行的)。当我尝试执行它时出现以下异常:

java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符

注意到 ddl 是正确的,因为它已经在我正在连接的同一个数据库上 运行 进行了检查 groovy。

知道如何解决这个问题吗?

我认为 JDBC 不支持这个,但是 tools/libraries 可以提供帮助,请参阅 this answer 了解 Java。

在 Groovy 中,使用此 JDBC script runner 将类似于:

Connection con = ....
def runner = new ScriptRunner(con, [booleanAutoCommit], [booleanStopOnerror])
def scriptFile = new File("createTable.ddl")
scriptFile.withReader { reader ->
    runner.runScript(reader)
}

或者,如果您的脚本是 "simple enough"(即没有注释,除了分隔语句之外没有分号...),您可以加载文本,围绕 ; 拆分它并使用 sql.withBatch,类似这样的东西:

def scriptText = new File("createTable.ddl").text
sql.withBatch { stmt ->
    scriptText.split(';').each { order ->
        stmt.addBatch order.trim()
    }
}

如果您无法在 JDBC 中完成(参见 Hugues 的回答),请考虑从您的 Groovy 程序中执行 sqlplus

["sqlplus", CREDENTIALS, "@"+scriptToExecute].execute()